2015-09-11 15 views
2

我正在研究輪圖設計,我需要幫助您在360度輪上定位文本。在360度上寫文字/值Cricle

車輪有12個部分,每個30度。文字與圓圈外線的偏移應該相等(或至少相似)。就像在下面的圖片中,我嘲笑了我最終得到的結果。

enter image description here

到目前爲止,我已經試過被分割每個部分爲單獨的變量如

$section1_startX = 50; 
$section1_endX = 70; 
$section1_startY = 310; 
$section1_endY = 480; 

,然後放置文本

imagettftext($im, 15, 0, $section1_startX, $section1_startY, $black, $font, "05"); 

但這是查找/計算每一行我需要放置的像素。

我相信有更好的,動態的和智能的方法來將文本放在x,y位置上,這取決於它在360度圓中的值。

你能幫我一下嗎?

在此先感謝。

回答

1

嗨,我想你想在給定的學位給定的圓上找到一個點。這是一個計算圓上點的函數。我認爲你可以很容易地將其轉換成任何其他語言。

public static PointF PointOnCircle(float radius, float angleInDegrees, Point origin) 
{ 
    //radius -> Radius of Circle & Origin -> Circle Centre. 
    // Convert from degrees to radians via multiplication by PI/180   
    float x = (float)(radius * Math.Cos(angleInDegrees * Math.PI/180F)) + origin.X; 
    float y = (float)(radius * Math.Sin(angleInDegrees * Math.PI/180F)) + origin.Y; 

    return new PointF(x, y); 
} 
+0

謝謝,它幫助了很多,它的時鐘明智的,我怎麼能做到這一點的反時針,就像我在我的問題提到的,我的第一個塊是在左邊,明智的移動反時鐘?由方法,這裏是我從你的代碼片段函數PointOnCircle($ radius,$ angleInDegrees,$ origin)轉換而來的PHP函數。 ]。 $ y =($ radius * sin($ angleInDegrees * M_PI/180))+ $ origin [1]; return array($ x,$ y); }' – Alyas

+0

簡單地從360減去角度。即目標= 360-輸入角度 –

+0

360-inputAngle做反時鐘智能,但我打算水平翻轉,就像第一個塊應該在我的圖像中標記爲1。無論如何,幫助到目前爲止。 – Alyas