在“蜘蛛网”中获取矩形?

时间:2012-04-06 14:22:40

标签: geometry

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

enter image description here

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

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

谢谢!

2 个答案:

答案 0 :(得分: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种方法。这可以用来绘制具有非常高性能的两个圆弧,同时使它看起来更漂亮!

答案 1 :(得分:0)

计算圆心和指定点之间的角度。然后找到与它关闭角度的2条线,它们将在这两条线之间。

计算点与圆心的距离。

沿着线(D)绘制相同的距离,除以圆之间的距离。你会以这种方式获得全部4分。