2D中如何判斷一點在另一個點的那個方位

來源:互聯網
上載者:User

  在工作中經常遇到判斷一個點在另一個點的那個方位的問題,如,這裡需要確定p2在p1的那個方位,也就是求p2相對於p1落在地區1,2,3,4那個中,注意此處p1不是座標原點,座標原點在螢幕的左上方(此處為螢幕座標)。這個問題的解決方案有很多,可以使用向量夾角來做,使用該夾角的方法涉及到向量的乘除,速度上會有影響。此處給出的方法只需判斷點的座標值即可。

  具體演算法描述如下:

  1.將p1,p2轉換為以p1為座標原點,也即平移座標系。給出的就是轉換後的座標系

  2.由可以看出:

     地區1中有:|x| > |y|, x > 0

     地區2中有:|x| < |y|, y < 0

     地區3中有:|x| > |y|, x < 0

     地區4中有:|x| < |y|, y > 0

 

  代碼如下:

 bool GetDirect(<br />POINT p1,<br />POINT p2,<br />int& nRegion)<br />{<br />float fDis = (float)sqrt((double)((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)));<br />if (fDis < 0.001)<br />{<br />// 亮點重合<br />nRegion = 0;<br />return false;<br />}</p><p>// 將p2轉換為以p1為座標中心的座標系中<br />p2.x -= p1.x;<br />p2.y -= p1.y;</p><p>if (abs(p2.x) > abs(p2.y) && p2.x > 0)<br />{<br />nRegion = 1;<br />}<br />else if (abs(p2.x) > abs(p2.y) && p2.x < 0)<br />{<br />nRegion = 3;<br />}<br />else if (abs(p2.x) < abs(p2.y) && p2.y < 0)<br />{<br />nRegion = 2;<br />}<br />else if (abs(p2.x) < abs(p2.y) && p2.y > 0)<br />{<br />nRegion = 4;<br />}</p><p>return true;<br />}

  總結:通過該方法可以判斷其它地區的情況,只需將判斷條件修改一下即可

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.