[英]Is a point between two points?
經過谷歌搜索並在Stack上查看了很長時間后,我只是設法找到一個方法來確定一個點是否落在連接兩個點的線上。 不幸的是,這不是我需要的。
請參閱此問題末尾的圖像。 我提前為這張可怕的照片道歉,但它得到了重點(得到它?)。
我需要創建兩條垂直線,連接點x和y。 它們需要在點x和y處與垂直線相交。 然后,我需要判斷點z是否出現在這兩行之間。
任何幫助表示贊賞。 謝謝你的時間!
計算角度xyz和yxz。 如果其中一個> 90,則它在外面。
既然你用java
標記了你的問題,那你就去:
import javafx.geometry.Point2D;
....
// is z between parallel lines
boolean betweenLines(Point2D x, Point2D y, Point2D z) {
return x.angle(y,z) < 90 && y.angle(x,z) < 90;
}
要查找Z點是否落在所需條帶中,您可以確定Z到XY線的投影是否落在這些點之間。 定義向量v = Y - X和w = Z - X. 如果參數b落在0..1范圍內,則投影位於XY段中。 非常簡單的公式:
b = DotProduct( w,v )/ DotProduct( v,v )
JavaScript中的示例代碼:
// JavaScript function to determine if infinite strip generated
// by x and y contains the point z
// point structure is:
// {
// double x;
// double y;
// }
// returns true or false
function stripContainsPoint(x, y, z) {
var distXZ = (x.x - z.x) * (x.x - z.x) + (x.y - z.y) * (x.y - z.y),
distXY = (x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y),
distYZ = (y.x - z.x) * (y.x - z.x) + (y.y - z.y) * (y.y - z.y);
// if triangle is right or acute, or obtuse with hypotenuse XY, returns true
return (distXZ + distXY >= distYZ) && (distYZ + distXY >= distXZ);
}
變量dist??
是誤稱,因為它們實際上是每個的距離平方。
因此,可以通過y = mx + b
來描述線。 讓我們說你的第一行用y = 2x-1
。 然后對於任何點(u,v),你可以插入x=u
,使得y = 2u-1
。 這允許您確定線上x位置的y
。 因此,如果v>y
,那么你的點就在線之上。 否則,你的觀點就在線下。
通過使用兩條平行線進行此操作,您最終將從圖片中看出三個案例:
編輯:
閱讀你的帖子上的一些評論,聽起來可能有比這更好的方法:)
基本上,這是一個數學問題而不是編程問題。 (換句話說,一旦你理解了數學,編程就變得微不足道了。)
我可以想到兩種方法:
計算出穿過x和y的2條垂直線。 如果z高於x垂直線並低於y垂直線。
計算出yxz與xyz之間的角度之間的角度。 如果兩個角度都小於90度,則z在線之間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.