2012-06-14 38 views
1

請耐心等待 - 我發現這很難解釋。跨多個平面的三角測量

這更多的是一個三角函數問題,但它的重要性在JavaScript/KineticJS中。

我有一系列'包含'行和'處理的'組。這種方式的工作方式,最適合每個小組都有自己的座標平面。我在尋求幫助的問題是這種解決方案不理想的唯一情況。

當這些組旋轉時,它們的座標平面也旋轉。這允許組對象被重用,並且其子女可以從組的起源進行測量,而不用擔心父組的方向。起來總是起來......我的小組面臨哪種方式並不重要。

我是一個新的海報,所以我不能添加圖像。不過,我認爲看到它至關重要。請參閱http://i.imgur.com/WUVXE.png

目標是將紅色圓弧('手柄')的未連接點附加到藍色線條('線條')上的黑點。爲了演示目的,我已將其設置爲始終繪製90度。

儘管約定,我使用的API順時針旋轉,給紅線的角度爲0,黃線的角度爲116,綠色180和藍色296 - 所有相對於左上角相同的原點的屏幕。這些角度會發生變化,所以我正在尋找公式來計算紅色手柄的新終點。

X軸始終沿着每條線的中間向下行進。該行寬度爲20px,所以在「死區」的上方或下方有10px。紅色手柄上的兩個正確點是(10,10)和(30,10)。手柄的半徑爲20px。

由於紅色和藍色組的平面不同,因此無法說red.arcEndX = blue.blackDotX,red.arcEndY = blue.blackDotY。例如,紅色(0,0)總是等於藍色(200,0)。把每條線想象成一條無法分離的鏈條。

那麼,我該如何計算紅色弧線的剩餘點呢?它應該無縫地連接到藍線的邊緣,恰好在藍線上黑點的中心點被轉換到紅色座標平面的地方。

我可能需要的所有測量結果都可用,或可以進行計算。

Handle.prototype.update = function() { 

    /* if we are the red group, this.parent is our group and 
     'prev' is the blue group. */ 

    var prev = this.parent.getPrev(); 

    // somehow get the new (x,y) for point2 below: 

    /* KineticJS SVG string. this.origin and this.point1 never 
     change. This (M)oves to 10,10, draws a (L)ine from 
     this.origin.x, this.origin.y to this.point1.x, this.point1.y 
     and (C)urves to this.point2.x, this.point2.y. this.centerXY 
     is the control point of that curve. */ 

    this.data = "M" + this.origin + "L" + this.point1 + "C" + this.point1 + "," + this.centerXY + "," + this.point2 + "L" + this.origin + "z"; 

    this.shape.setData(this.data); 
} 
+0

如果有人絆倒在這 - 我有什麼是正確的,除非我不能容納原點翻譯。如果你把每個飛機的一切都移動到(0,0),那麼做你的罪/ cos,那麼你會沒事的。 – oooyaya

回答

0

萬一有人絆倒在這一點 - 我有什麼是正確的,除了我沒能容納的起源翻譯。如果你把一切都移到(0,0)每架飛機,做你的罪/ cos,那麼你會好的