亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找點是否位于矩形內

查找點是否位于矩形內

API
慕虎7371278 2019-12-10 13:08:41
我想查找一個點是否位于矩形內。矩形可以以任何方式定向,并且不需要軸對齊。我想到的一種方法是旋轉矩形和點的坐標以使矩形軸對齊,然后通過簡單地測試點的坐標是否位于矩形的坐標內來進行測試。上述方法需要旋轉,因此需要浮點運算。還有其他有效的方法嗎?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

矩形如何顯示?三分?四分?點,邊和角度?一分兩分?還有嗎 不知不覺中,任何回答您的問題的嘗試都將僅具有學術價值。


在任何情況下,對于任何凸多邊形(包括矩形)的測試是非常簡單的:檢查多邊形的每個邊緣,假設每個邊緣在反時針方向被取向,并測試點是否位于向左的邊緣的(在左-手半平面)。如果所有邊緣均通過測試,則該點在內部。如果至少有一個失敗-該點在外面。


為了測試該點是否(xp, yp)位于邊緣的左側(x1, y1) - (x2, y2),您只需要計算


D = (x2 - x1) * (yp - y1) - (xp - x1) * (y2 - y1)

如果為D > 0,則該點在左側。如果為D < 0,則該點在右側。如果為D = 0,則該點在線上。


該答案的先前版本描述了左側測試的看似不同的版本(請參見下文)。但是可以很容易地證明它計算出相同的值。


...為了測試點是否(xp, yp)位于邊緣的左側(x1, y1) - (x2, y2),您需要為包含邊緣的線構建線方程。公式如下


A * x + B * y + C = 0

哪里


A = -(y2 - y1)

B = x2 - x1

C = -(A * x1 + B * y1)

現在您要做的就是計算


D = A * xp + B * yp + C

如果為D > 0,則該點在左側。如果為D < 0,則該點在右側。如果為D = 0,則該點在線上。


但是,該測試同樣適用于任何凸多邊形,這意味著它對于矩形可能太通用了。矩形可能允許更簡單的測試...例如,在矩形(或任何其他平行四邊形)中,的值A和值B具有相同的大小,但相對(即平行)邊緣的符號不同,可以利用該值簡化測試。



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 538 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號