2017-02-22 38 views
-1

我想找出一個點是否在一個正方形內。我給出了一個正方形對角線的末端座標,並且我發現了另一個對角線的末端座標。如何找到某個點是否在Java中放置在正方形中?

我能想到的一種方法是通過使用外接圓的屬性來解決它。我已經包括了廣場外圍的所有點,但我想不出一種方法來排除額外的點。

邊緣不平行於任何座標軸。

有沒有辦法在java中做到這一點?

赫雷什我的代碼部分:

if(distance(x1,y1,x2,y2,j,i)<=dd) 
     A[i][j]=1;   
    else 
     A[i][j]=0; 

X1,Y1,X2,Y2是對角線的正方形和DD的座標是對角線長度和I,J是座標大於0並且小於100. 我使用數組來存儲滿足條件的點。

+0

這篇文章可以幫助你。 http://alienryderflex.com/polygon/ –

+1

對於邊緣不一定平行於座標系的正方形,請參閱http://math.stackexchange.com/questions/190111/how-to-check-if-a點是在矩形內。順便說一句,是一個關於測試一個點是一個向量的順時針還是逆時針的答案。 Sedgewick的「C語言算法」爲這種ccw()測試提供了僞代碼,並建議三邊或四邊的多邊形比「多邊形中的點」更簡單,只需對每一邊進行測試即可。 [你可以在線找到這個僞代碼。] –

+0

你的同學在這裏:http://stackoverflow.com/questions/42407174/ – MBo

回答

0

在這種情況下,我認爲你可以嘗試編程曼哈頓從廣場到中心的距離,並將其與曼哈頓從廣場中心到其中一個角的距離進行比較,如果距離(點,中心)<距離(中心,限制)

+0

你能請多解釋一下嗎 –

+0

你可以在這裏找到更多信息:https://en.wikipedia。org/wiki/Taxicab_geometry其通常用於離散數字距離,但我認爲你也可以使用浮點值 – MJCORBACHO

+1

曼哈頓距離不相關:它是沿着每個座標軸的距離的總和。有兩個問題:1)需要定義這些座標軸; 2)總和不相關,它只是沿兩個座標軸的中心距離的最大值。 –

1

在Java中沒有內置的方法,但它是簡單的數學。

的線的方程爲:

a * x + b * y = c1 (1) 

平行於該線的方程爲:

a * x + b * y = c2 (2) 

的兩行垂直於這些方程式是:

-b * x + a * y = c3 (3) 
-b * x + a * y = c4 (4) 

這些是正方形四個邊的方程。

確定上述方程的係數(a,bc1..c4)。

點是正方形內當且僅當同時滿足以下兩個條件:

min(c1, c2) <= a * x + b*y <= max(c1, c2) 
min(c3, c4) <= -b * x + a * y <= max(c3, c4) 
+0

如果我們找不到任何一個座標,那麼? –

+0

我不知道你在問什麼。 –

+0

我的意思是說,如果我不知道任何一個座標,那麼我可以執行它嗎? –

相關問題