2012-04-06 57 views
2

想象一下,圍繞一箇中心的給定增加半徑的圓,由給定旋轉的線交叉 - 我如何能夠在一個網格位置內繪製一個近似的4邊框矩形,如圖所示在圖像中的一個點位置?在「蜘蛛網」內獲取矩形?

enter image description here

詳細信息:我使用Lua的移動應用中。左上角座標爲0,0,所以中心爲maxX/2,maxY/2;我正在使用變量rotationStep和radiusStep來創建網絡。

* 6點或更多點的多邊形可能看起來更好。

謝謝!

回答

0

找出圓心與指定點之間的夾角。然後找到兩條與它關閉角度的線,它將在這兩條線之間。

計算你的點距離圓心的距離。

沿着你的線(D)繪製相同的距離,除以圓之間的距離。你會以這種方式得到所有4分。

+0

那麼我已經有2行了,我有兩個圓圈,現在我怎麼得到4個矩形點?也許在僞代碼?謝謝! – 2012-04-06 15:21:18

+0

當你說你有他們時,你的意思是什麼?你有沒有找到使你感興趣的領域的2線和2個圈子? – 2012-04-06 16:07:23

+0

Mk,是的,我有這個,但我仍然不太確定如何繪製矩形(或6 +點折線)。我通過將點位置除以radiusStep得到的圓圈,通過'math.ceil(math.ceil((math.atan((app.center.y - point.y)/(app.center.x - point.x))* 180)/ math.pi)/ app.rotationStep)' – 2012-04-07 10:23:43

1

首先計算形狀的四個角。

x1 = cx + radialScale*radiusStep*cos(rotationScale * rotationStep) 
y1 = cy + radialScale*radiusStep*sin(rotationScale * rotationStep) 
x2 = cx + radialScale*(radiusStep+1)*cos(rotationScale * rotationStep) 
y2 = cy + radialScale*(radiusStep+1)*sin(rotationScale * rotationStep) 

x3 = cx + radialScale*radiusStep*cos(rotationScale*(rotationStep+1)) 
y3 = cy + radialScale*radiusStep*sin(rotationScale*(rotationStep+1)) 
x4 = cx + radialScale*(radiusStep+1)*cos(rotationScale*(rotationStep+1)) 
y4 = cy + radialScale*(radiusStep+1)*sin(rotationScale*(rotationStep+1)) 

其中(cx,cy)是中心點 - 在你的情況下(maxX/2,maxY/2)。

常量rotationScale和radialScale只是將步驟放大到整個範圍。例如,如果您有n個扇區,則rotationScale爲2PI/n。如果你有m個「帶」,radialScale是R/m,網中最外層的圓的半徑是R.希望這是有道理的。

這裏的想法就像在一個規則的網格。

  • 一個起始點
  • 一個指向 「正確的」(在規則網格X + 1,rotationStep + 1這裏)
  • 一個點「DOWN2(Y + 1在一個規則的網格,radiusStep +1這裏)
  • 然後一個點右下來。

現在只畫與點之間的四行瞧!

大多數圖形軟件包也有一個DrawArc排序方法。這可以用來繪製出性能非常高的兩個圓弧,同時使它看起來更漂亮!

+0

非常感謝,這看起來非常好,我會試一試! – 2012-04-08 19:32:12