求!!! c++作出判斷一個點是否在(不規則)四邊形當中


首先給出四個點的坐標( x1,y1,x2,y2,x3,y3,x4,y4)
然后在輸入目標點(X,Y)的坐標.
判斷這個點是否在此四邊形當中.   仁兄注意,是任意四邊形!
會發生的情況很多,請留心......用Ctrl+c  Ctrl +v 的 閃遠點!
求助高手 !!! 
要精確的代碼。 

24 个解决方案

#1


先給你一個思路,沒空幫你寫代碼。
從目標點引出一條線,連到與這個點最遠的頂點,然后判斷與邊相交的次數,奇數的在內,反之。

#2


態度惡劣。。。

#3


有個API可以

#4


一樓正解,請查找計算機圖形學相關內容。。。話說原來我用VB寫過一個

#5


三樓的也行,要用API函數PtInRegion

#6


PtInRegion

#7


引用 1 樓 zhouzhipen 的回復:
先給你一個思路,沒空幫你寫代碼。
從目標點引出一條線,連到與這個點最遠的頂點,然后判斷與邊相交的次數,奇數的在內,反之。

如果是凹四邊形估計不對吧?

#8


圖形學里有各種填充算法,涉及到這方面的,看下吧。

#9


引用 7 樓 j8daxue 的回復:
引用 1 樓 zhouzhipen 的回復:
 先給你一個思路,沒空幫你寫代碼。
 從目標點引出一條線,連到與這個點最遠的頂點,然后判斷與邊相交的次數,奇數的在內,反之。

 如果是凹四邊形估計不對吧?


絕對是正確的,不管是不是凹四邊形

#10


書上有的東西 不去看看書,就出來問! 還要代碼
八成是學生!
不管鳥! 

#11


要精確代碼基本沒指望——這個社會人人都很忙。給個思路:

  記不記得直線方程 Ax + By + C = 0 (A,B,C是常數)的一個性質: 把平面分成了兩部分,任意點(x0, y0)帶入后Ax0 + By0 + C >0 的在一側,小於0的在另一側。
  最壞的情況,判斷四次就行了。

  動動手求幾個方程參數吧,這可是高二的東西。


#12


樓上正解

#13


態度絕對惡劣

#14


既然是求助,態度就要虛心點,給人一副盛氣凌人的樣子~

#15


引用 9 樓 zhouzhipen 的回復:
引用 7 樓 j8daxue 的回復:
引用 1 樓 zhouzhipen 的回復:
先給你一個思路,沒空幫你寫代碼。
從目標點引出一條線,連到與這個點最遠的頂點,然后判斷與邊相交的次數,奇數的在內,反之。

如果是凹四邊形估計不對吧?
絕對是正確的,不管是不是凹四邊形

凹四邊形錯誤

#16




1,求出多邊形的面積,面積>0代表逆時針,<0為順時針,(高中數學里面有求多邊形面積公式)
2,求出該點到任一條邊的距離,距離>0點在直線左邊,<0點在直線右邊
3,面積x距離,其積>0,點在內,<0點在外
該方法的可以為任意多邊形,不僅僅限於4邊形,也不用區分凹還是凸

#17


以前寫過,分別用四邊形的每兩個點與所求點構成兩條線,然后求出兩條線的夾角,最后求出所有夾角之和,若小於360的話救災四邊形外面。

#18


引用 17 樓 kingbyang1 的回復:
以前寫過,分別用四邊形的每兩個點與所求點構成兩條線,然后求出兩條線的夾角,最后求出所有夾角之和,若小於360的話救災四邊形外面。

可能不是簡單多邊形,邊除了頂點還有交點

#19


態度絕對惡劣,絕對BS。

#20


POINT pt[] = {x1,y1,x2,y2,x3,y3,x4,y4};
CRgn rgn;
rgn.CreatePolygonRgn(pt,4,WINDING);
rgn.PtInRegion(point2test);

這樣應該可以吧。

#21


引用 20 樓 captainliyun 的回復:
POINT pt[] = {x1,y1,x2,y2,x3,y3,x4,y4};
CRgn rgn;
rgn.CreatePolygonRgn(pt,4,WINDING);
rgn.PtInRegion(point2test);

這樣應該可以吧。

這段代碼應該已經夠用了。要自己寫的告訴你一個思路:
從目標點引出無窮遠的射線,然后判斷這段射線和邊的交點的個數,交點個數為奇數則點在內,為偶數在在外,其中要注意的是交點是否正好落在圖形的頂點,是的話要判斷兩邊是否在射線的同側,同側時候此交點數不計,異側則此交點有效

#22


樓上的辦法已經很好了,你要是實在覺得不行,你就用面積相等的方法來判斷,如果在四邊形內,該點和四邊形四個點所分別所組成的三角形面積等於改四邊形的面積,否則就在四邊形外。不過,你只是個點最后是按某個方向按順序排列的

#23


幫學生做作業純屬浪費時間。

#24


這不是C++問題,是數學問題

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com