1. 程式人生 > >已知直線上的兩點 A(x1, y1), B(x2, y2) 和另外一點 C(x0, y0),求C點到直線的距離。

已知直線上的兩點 A(x1, y1), B(x2, y2) 和另外一點 C(x0, y0),求C點到直線的距離。

數學知識太差,一點點積累,高手勿噴。

1. 先求出AB向量
a = ( x2-x1, y2-y1 )

2. 求AB向量的單位方向向量
b = √((x2-x1)^2 + (y2-y1)^2))

a1 = ( (x2-x1)/b, (y2-y1)/b )

3.求出CA的法向向量(或CB的法向向量)
c = ( y0-y1, -(x0-x1) )

4. 距離 = AC法向向量與BC向量的單位方向向量的數量積
距離d = a1 * c = ( (x2-x1)(y0-y1) - (y2-y1)(x0-x1) ) / √((x2-x1)^2 + (y2-y1)^2))

參考http://zhidao.baidu.com/link?url=_p1KjVfPqY4ZnEf9h4GNR1OiwkoDrds_LfTCyZTTTo6sljXJP8i-tUtSHECt5_k8WwA0g04lkBUNrEGCz0hcUK
原文中還有第5步,我把第四步作了一些修改,感覺就夠了。
其實我也不懂,特別是第四步為什麼會得到距離?

請高手指點指正。
謝謝

ps: 判斷垂足線上段內:

AC*AC - d*d < AB*AB && BC*BC - d*d < AB*AB

相關推薦

直線兩點 A(x1, y1), B(x2, y2) 另外一點 C(x0, y0)C直線距離

數學知識太差,一點點積累,高手勿噴。 1. 先求出AB向量 a = ( x2-x1, y2-y1 ) 2. 求AB向量的單位方向向量 b = √((x2-x1)^2 + (y2-y1)^2)) a1 = ( (x2-x1)/b, (y2-y1)/b ) 3.求出CA的法向向

一條線段的兩端點A(x1,y1),B(x2,y2)及線段外的任意一點P(px,py),設計一個程式找出線段中距離p最近的

#include<stdio.h> typedef struct { float x; float y; }Point; typedef struct { Point p1; Point p2; }Line_segment; void initLine (Line_

【筆記】兩點座標半徑圓心

參考了一下這個博主的部落格:https://blog.csdn.net/liumoude6/article/details/78114255?locationNum=2&fps=1 已知兩點座標(x1, y1), (x2, y2)和半徑R,求圓心座標(x0, y0)。 程式設計

圓弧兩點座標半徑圓心座標的演算法(C++)

#include<iostream> #include<math.h> using namespace std; void YuanXin(double x1,double y1,double x2,double y2,double R,double

驗證“哥德巴赫猜想”/水仙花數/給定平面任意三個的座標(x1,y1)、(x2,y2)、(x3,y3)檢驗它們能否構成三角形

迴圈-04. 驗證“哥德巴赫猜想”(20) 數學領域著名的“哥德巴赫猜想”的大致意思是:任何一個大於2的偶數總能表示為兩個素數之和。比如:24=5+19,其中5和19都是素數。本實驗的任務是設計一個程式,驗證20億以內的偶數都可以分解成兩個素數之和。 輸入格式: 輸入在一

二叉樹的先序遍歷序列中序遍歷序列輸出該二叉樹的後序遍歷序列

iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的

買茶葉想到的哪個比較便宜 x1/y1 >x2/y2 x代表多少錢 y代表 多少克 無聊的試煉

茶葉1 128元     200克 茶葉2  330元    160克 當然這個哪個便宜 一眼就知道了,這裡不過拋磚引玉 128元    330元 200克    160克 我們把價錢用x表示 多少克

線性表的合併兩個集合AB現要求一個新的集合A=AB例如A=(7,5,3,11)B=(2,6,3)合併後A=(7,5,3,11,2,6)

#include<iostream> using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define  MAXSIZE 100 &n

三個座標圓半徑 r 圓心座標

問題: 已知圓上三個點座標分別為(x1,y1)、(x2,y2)、(x3,y3) 求圓半徑R和圓心座標(X,Y) X,Y,R為未知數,x1,y1,x2,y2,x3,y3為常數 則由圓公式: (x1-X)²+(y1-Y)²=R²     

POJ-3243-Clever Y-擴充套件Bsgs演算法-acpa^b=c(mod p)b

【Description】 Little Y finds there is a very interesting formula in mathematics: XYmod&MediumSpace;Z=K X^Y mod\:Z=K XYmodZ=K

座標圓心半徑

R半徑 PCenter圓點座標  public void GetCircular(PointF P1,PointF P2,PointF P3,ref float R,ref PointF PCenter) { float a

地面上兩點經續度兩點球面距離函式Flex及C

Flex版本private function getDis(lat1:Number,lng1:Number,lat2:Number,lng2:Number):Number{ var radlat1:Number=lat1*3.1415926/180.0;

座標圓心

//求圓心座標 getCenterPos:function(x1,y1,x2,y2,x3,y3){ var a=2*(x2-x1); var b=2*(y2-y1); var c=x2*x2+y2*y2-x1*x1-y

C# 經緯度計算兩點距離函式

public Task<double> GetDistance(double lat1, double lon1, double lat2, double lon2) {

兔的總數量n總腳數為m輸入nm依次輸出雞兔的數目如果無解輸出“no answer” 將下面的程式碼填寫完整

撰寫人——軟工二班——陳喜平 題目描述 已知雞和兔的總數量n,總腳數為m。輸入n和m,依次輸出雞和兔的數目。如果無解,輸出“no answer”。 將下面的程式碼填寫完整。 #include <stdio.h> int main() { int m,n,x,y;

二叉樹的中序遍歷結果(先序或後序結果)還原建立二叉樹

主函式 int main(int argc, char** argv){ int n, m; cin>>n; for(int i=0;i<n;i++){ cin>>m; v.push_back(m); } for(

中序遍歷序列後序遍歷序列先序遍歷

通過中序遍歷和後序遍歷求先序 中序:BDCEAFHG 後序:DECBHGFA 求先序遍歷結果: 先求原始二叉樹 後序遍歷中最後出現的是根,所以A是整棵樹的根,在結合中序遍歷來看 BDCE是A的左子樹,而FHG是A的右子樹,所以我們就有了下面的圖:

二叉樹的中序後序遍歷排列前序遍歷

#include<iostream> #include<string> using namespace std; void Preorder(string inorder,string postorder) { if(inorder.size()&

源圖四點坐標目標圖四點坐標透視變換矩陣

lan tails i++ show ffi 源碼 讓我 strong 函數   最近在搞圖像處理,碰到了透視變換的問題。   同事給我一些代碼,裏邊有誤差,挺嚴重,讓我幫他想想哪裏出錯了。搗鼓了很久,我猜測肯定是透視變換矩陣求錯了,然後我的透視變換之旅就開始了。   

Problem C: 呼叫函式a+aa+aaa+....+aa...aa(n個a)

#include <stdio.h> int fn(int a,int n)//定義函式 { int i,s,m=0; for(i=1;i<=n;i++) { m=m+a;//當a=3時,m=3,然後a=30,m=33; a=