2012-04-06 62 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