2011-08-20 156 views
0

我從我的實體的中心點有一個圓形(邊界圓)偏移,我正在尋找如何在實體旋轉時移動該圓形以便始終位於同一位置的角色。例如,假設我在汽車前部有一個邊界圓,當汽車轉向時,該邊界圓也需要轉向。圍繞一個點移動一個圓圈

所以我有兩點:position這是實體的中心點的位置和offset這是從該位置的圓的偏移量。如果我的車面臨0度這假定爲0

因此,一個角度: position(150,150)和offset(50,0),那麼外接圓將是在200和150

現在如果我轉動車90度,外接圓應在150位,200

這是我現在有:

var differenceX : Number = _centre.x - _offset.x; 
var differenceY : Number = _centre.y - _offset.y; 

var rotatedX : Number = differenceX * Math.cos(_angle); 
var rotatedY : Number = differenceY * Math.sin(_angle); 

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY); 

但它給了我這些長橢圓形,現在一個完美的圓。

想法?

回答

0

也許儘量不要使用實體畫圓:

var circlePositionX : Number = _centre.x - _offset.x; 
var circlePositionY : Number = _centre.y - _offset.y; 

var radius : Number = 50; 

var rotatedX : Number = circlePositionX + (radius * Math.cos(_angle)); 
var rotatedY : Number = circlePositionY + (radius * Math.sin(_angle)); 

希望幫助...

0

要旋轉你有效地把它回原點車和旋轉它那裏,然後翻譯回來。圓心同樣也就是它只是車上的另一點。只需在_offset上單獨執行輪換,然後再通過_centre 進行轉換。

0

您正在旋轉偏移量和對象位置之間的差異。我認爲你直覺上有一個正確的想法,想旋轉圓圈和它的對象之間的距離,但可能錯誤地指出了圓圈位置的偏移量。無論哪種方式,由於您已經有了偏移量,我們不需要計算兩者之間的距離。

此外,當您旋轉2D矢量時,還需要使用2D旋轉。 2D旋轉使用x和y分量組成每個新的x'和y'分量。快速谷歌返回像this

由於代碼總是更容易理解:

var cosAngle : Number = Math.cos(_angle); 
var sinAngle : Number = Math.sin(_angle); 

var rotatedX : Number = _offset.x * cosAngle - _offset.y * sinAngle; 
var rotatedY : Number = _offset.x * sinAngle + _offset.y * cosAngle; 

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY); 

以前的旋轉的橢圓形狀是由於不使用二維旋轉和您的圈子的距離大概了下來,因爲differenceX和differenceY間沒有」正確的價值觀。