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

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

如何確定二維點是否位于多邊形內?

如何確定二維點是否位于多邊形內?

如何確定二維點是否位于多邊形內?我想創造一個快地二維點內多邊形算法,用于命中測試。Polygon.contains(p:Point))。如能就有效的技術提出建議,將不勝感激。
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

我認為下面的代碼是最好的解決方案(摘自這里):

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy){
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i++) {
    if ( ((verty[i]>testy) != (verty[j]>testy)) &&
     (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
       c = !c;
  }
  return c;}

論點

  • 內涵

    多邊形中的頂點數。是否在結尾重復第一個頂點,已經在上面提到的文章中討論過了。
  • vertx,verty

    數組包含多邊形頂點的x坐標和y坐標。
  • 遺囑

    *測試點的x和y坐標。

它既短又有效,同時適用于凸多邊形和凹多邊形。正如前面所建議的,您應該首先檢查包圍矩形并分別處理多邊形孔。

這背后的想法很簡單。作者將其描述如下:

我從測試點水平地運行一條半無限射線(增加x,固定y),并計算它穿過多少個邊。在每個十字路口,光線在內部和外部之間切換。這叫做Jordan曲線定理。

每次水平射線穿過任何邊緣時,變量c都從0切換到1和1到0?;旧?,它是跟蹤交叉邊的數目是偶數還是奇數。0表示偶數,1表示奇數。


查看完整回答
反對 回復 2019-05-30
  • 3 回答
  • 0 關注
  • 971 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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