想象一下围绕中心的给定半径增加的圆,与给定旋转的线交叉 - 我如何能够在其中一个网格位置内绘制一个近似 4-borders 矩形*,如图所示,基于图像中的点位置?
详细信息:我正在将 Lua 用于移动应用程序。左上角坐标为0, 0,所以中心为maxX/2,maxY/2;我正在使用变量 rotationStep 和 radiusStep 来创建网络。
* 6 点或更多点的多边形可能看起来更好。
谢谢!
想象一下围绕中心的给定半径增加的圆,与给定旋转的线交叉 - 我如何能够在其中一个网格位置内绘制一个近似 4-borders 矩形*,如图所示,基于图像中的点位置?
详细信息:我正在将 Lua 用于移动应用程序。左上角坐标为0, 0,所以中心为maxX/2,maxY/2;我正在使用变量 rotationStep 和 radiusStep 来创建网络。
* 6 点或更多点的多边形可能看起来更好。
谢谢!
首先计算形状的四个角。
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。希望这是有道理的。
这里的想法就像在常规网格中一样。
现在只需在点之间画四条线,瞧!
大多数图形包也有一种DrawArc
方法。这可以用来绘制两个圆弧,性能非常好,同时看起来更漂亮!
找出圆心与指定点之间的角度。然后找到与它有闭合角度的 2 条线,它将位于这 2 条线之间。
计算你的点到圆心的距离。
沿着你的线(D)绘制相同的距离,除以圆圈之间的距离。这样,您将获得所有 4 分。