簡體   English   中英

是兩點之間的一點?

[英]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 - Xw = 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 ,那么你的點就在線之上。 否則,你的觀點就在線下。

通過使用兩條平行線進行此操作,您最終將從圖片中看出三個案例:

  1. y大於兩條線上的對應點
  2. y大於您的一條線上的對應點
  3. y小於兩條線上的對應點

編輯:

閱讀你的帖子上的一些評論,聽起來可能有比這更好的方法:)

基本上,這是一個數學問題而不是編程問題。 (換句話說,一旦你理解了數學,編程就變得微不足道了。)

我可以想到兩種方法:

  1. 計算出穿過x和y的2條垂直線。 如果z高於x垂直線並低於y垂直線。

  2. 計算出yxz與xyz之間的角度之間的角度。 如果兩個角度都小於90度,則z在線之間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM