已知直線上的兩點 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表示 多少克
線性表的合併已知兩個集合A和B,現要求一個新的集合A=A∪B。例如,設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演算法-已知a,c,p,和a^b=c(mod p),求b
【Description】 Little Y finds there is a very interesting formula in mathematics: XYmod 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。輸入n和m,依次輸出雞和兔的數目。如果無解,輸出“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=