2014-09-24 1761 views
5

我正在研究過去幾周涉及一些三角形的應用程序,目前我被卡住了。如下圖所示,我知道中心點(我們稱X1,Y1)爲圓形項目(位置#1處爲綠色圓圈)。該圓圈還有一點(橙色圓圈)偏離了中心位置 - 在另外兩個標記(藍色圓圈)之間。這些標記可以移動。計算橙色點的座標(我們稱之爲X2,Y2),並計算藍色線的角度(稱爲角度)與圓的水平線的關係。根據旋轉角度計算新的點偏移量?

Diagram

我可以計算出圓的中心和由所述點之間的差值:

DELTAX = X2-X1

移動deltaY = Y2-Y1

我需要將其起始位置(位置1)的綠色圓圈(順時針或逆時針 - 無論哪個較短)移動並移動到位置2.這意味着角度可能是負值或正值。藍線必須垂直,位置2(紅色方塊)中心的橙色圓點。我知道位置2的中心座標(我們稱之爲X3,Y3)。位置#1和位置#2彼此正好是90度。

我想我可以使用一些TRIG身份的公式計算一個點的旋轉,因爲這樣的:

OFFSETX = DELTAX * COS(90角) - 移動deltaY *罪(90角)

offsetY = deltaX * sin(90-角度)+ deltaY * cos(90-角度)

我希望這些偏移量是我需要調整圓到它的新中心,當它移動/旋轉到位置2.

X3 = X3 + offsetX

Y3 = Y3 + OFFSETY

然而,當我嘗試用這個數學,它不是放置圓的橙色標誌在廣場的中心。根據旋轉角度(正向或負向,CW或CCW)或我正確使用角度(從90度減去已知角度),我不知道我的公式和計算是否正確。我如何正確計算最終的點/位置?任何幫助和例子將不勝感激!

非常感謝您的時間!

回答

0

所以你需要旋轉你的圓圈90 - Angle,然後將橙色點移動到(X3,Y3)?
首先,你需要找到旋轉後的橙色點座標:

newX = X2 * cos(90 - Angle) - Y2 * sin(90 - Angle); 
newY = X2 * sin(90 - Angle) + Y2 * cos(90 - Angle); 

newXnewY是橙色旋轉後點的座標。爲了找到舉動根本轉變。減去:

moveX = X3 - newX; 
moveY = Y3 - newY; 

現在,如果你通過90 - Angle旋轉圈和(MOVEX,moveY)橙色點移動,它移動到(X3,Y3)。那就是如果你圍繞(0,0)點旋轉圓圈。如果圍繞某個(X,Y)點旋轉,首先需要從X2中減去X,Y2中減去Y,然後將X加到newX,Y中加到newY上。該減法將您的旋轉基點「移動」到(0,0),因此旋轉後需要將其移回:

newX = (X2 - X) * cos(90 - Angle) - (Y2 - Y) * sin(90 - Angle) + X; 
newY = (X2 - X) * sin(90 - Angle) + (Y2 - Y) * cos(90 - Angle) + Y; 
+0

謝謝。我會試試這個。我想我應該澄清一下,我正在將圈子從位置1移動到位置2,然後在那裏進行旋轉。所以,我需要將該橙色點(X2,Y2)居中在紅色正方形的中心(已知點X3,Y3)。角度根據藍色圓圈計算,有時可能爲負數(介於-1和-180之間)。不知道這是否影響公式? – DataCrypt 2014-09-24 16:21:15

+0

@DataCrypt如果旋轉基點隨着橙色點移動,那麼出於計算目的,移動或旋轉並不重要。如果您將橙色點移動到(X3,Y3),但答案將會錯誤,因爲您可能圍繞它的中心旋轉了圓圈,而不是圍繞橙色點(旋轉的點,它在旋轉後不會改變其座標)。當然,只有當(X3,Y3)不隨圓旋轉時。 – Atomosk 2014-09-25 02:36:09

+0

@DataCrypt任何值都可以用於'sin'和'cos',那些公式甚至是-9000。唯一讓我困惑的是'90-角度',因爲我看到的所有罪與cos實現都是以角度的弧度值而不是度數。但我很確定你知道這一點。 – Atomosk 2014-09-25 02:46:28