2

想象一下围绕中心的给定半径增加的圆,与给定旋转的线交叉 - 我如何能够在其中一个网格位置内绘制一个近似 4-borders 矩形*,如图所示,基于图像中的点位置?

在此处输入图像描述

详细信息:我正在将 Lua 用于移动应用程序。左上角坐标为0, 0,所以中心为maxX/2,maxY/2;我正在使用变量 rotationStep 和 radiusStep 来创建网络。

* 6 点或更多点的多边形可能看起来更好。

谢谢!

4

2 回答 2

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 个“带”并且网络中最外圈的半径为 R,则radialScale 为 R/m。希望这是有道理的。

这里的想法就像在常规网格中一样。

  • 一个起点
  • 向“右侧”一点(常规网格中的 x+1,此处为 rotationStep+1)
  • 一点“down2(常规网格中的y+1,此处radiusStep+1)
  • 然后向右向下一点。

现在只需在点之间画四条线,瞧!

大多数图形包也有一种DrawArc方法。这可以用来绘制两个圆弧,性能非常好,同时看起来更漂亮!

于 2012-04-07T13:07:01.280 回答
0

找出圆心与指定点之间的角度。然后找到与它有闭合角度的 2 条线,它将位于这 2 条线之间。

计算你的点到圆心的距离。

沿着你的线(D)绘制相同的距离,除以圆圈之间的距离。这样,您将获得所有 4 分。

于 2012-04-06T14:32:49.777 回答