2013-03-06 42 views
0

我要開始道歉,我正在努力闡明這個問題,所以我會從我試圖達到的目標開始。我將如何確定多邊形上一個點的相對位置?

我正在使用JavaScript和Raphael。

所以,我試圖存儲一個點相對於多邊形四角的位置。多邊形的相對角可以看作是在它們之間有一個軸,它總是與另一個軸成直角相遇。多邊形可以旋轉,並在任一軸上生長/收縮,但軸將保持直角。我希望點在移動/拉伸時保持在多邊形上的相同位置。點由用戶點擊多邊形上的一個點。

我希望能夠獲得一個鼠標點擊的X/Y座標,並將其轉化爲多邊形內部軸的一些相對百分比或東西,這可能並不總是與瀏覽器的X/Y軸平行。我將如何做到這一點?

此圖像可能有助於澄清我試圖表達的想法。

enter image description here

綠色點是其中我想用來存儲多邊形內的相對位置的點。我有紅色和藍色角落點的X/Y座標。

+0

我沒有專門使用拉斐爾,所以不能給出代碼示例,但作爲幾何問題,我會將xy座標轉換爲多邊形中心的向量 - 即角度和距離。然後可以應用變換並將其轉換回座標。 – 2013-03-06 02:43:18

+0

您應該在http://math.stackexchange.com/ – Dave 2013-03-06 02:56:51

回答

0

考慮將您的兩個紅點連接到X軸的線條,以及將藍點連接到Y軸的線條;那麼你可以將多邊形中的任何一點表示爲「沿着X遠離這一點,而沿着Y遠離」。這給你帶來了兩個需要解決的問題:

  1. 給出五點,綠點的「紅藍」座標是什麼?
  2. 給出四點和RB值,綠點在哪裏?

您可以通過沿着紅軸將點投影到藍軸上,反之亦然。

讓紅點的座標是(R1x, R1y)等。然後,我們執行下列操作:

RdirX = R2x - R1x; 
RdirY = R2y - R1y; 
BdirX = B2x - B1x; 
BdirY = B2y - B1y; 

現在,如果綠色座標(Gx, Gy)和「新」座標(RBr, RBb),您有以下公式:

RBr*RdirX + RBb*BdirX = Gx 
RBr*RdirY + RBb*BdirY = Gy 

在這種形式下,它解決了問題的第二部分(從RB座標回到歐幾里德);去另一個方向,你解出這些方程爲未知RBr和RBb。如果將多邊形的中心作爲座標系的原點,我懷疑事情會更好。

我已經完全寫出來的公式,以及創建一個畫面,顯示這一切是如何工作:

enter image description here
enter image description here

您應該能夠從這裏做...

+0

上提問此問題,我該如何從RdirX和RdirY轉到RBr? RdirX和RdirY究竟是什麼? – Fraserr 2013-03-06 22:00:47

+0

@Fraserr - 我已經用圖表和解決方案更新了我的答案。 – Floris 2013-03-13 14:47:38

相關問題