给定 N 作为输入,有没有一种方法可以生成规则 N 边形的角而无需划分且无需触发
Is there a way to generate the corners of a regular N-gon without division and without trig, given N as input
编辑:所以我找到了一个与栅格化梯形相关的页面https://cse.taylor.edu/~btoll/s99/424/res/ucdavis/GraphicsNotes/Rasterizing-Polygons/Rasterizing-Polygons.html,但我仍在尝试弄清楚是否可以只做边缘
我正在尝试为任意 N 边形的角点生成点。其中 N 是一个非零正整数。但我试图在不需要除法和触发的情况下有效地做到这一点。我在想这可能有某种 Bresenham 的类型算法,但我似乎找不到任何东西。
我在 Whosebug 上唯一能找到的是这个,但内角增量是通过使用 2*π/N 找到的:
How to draw a n sided regular polygon in cartesian coordinates?
这是 C 中那个页面的算法
float angle_increment = 2*PI / n_sides;
for(int i = 0; i < n_sides; ++i)
{
float x = x_centre + radius * cos(i*angle_increment +start_angle);
float y = y_centre + radius * sin(i*angle_increment +start_angle);
}
那么可以不做任何划分吗?
除了为 N
的所有有用值预先计算它们之外,没有避免调用 sin
和 cos
的解决方案。但是,不管 N
是多少,你只需要计算一次。 (假设你知道多边形的中心在哪里。你可能需要第二次计算来计算中心的坐标。)每个顶点都可以使用相同的旋转矩阵从前一个顶点计算出来。
预先计算值的查找 table 并不是一个不合理的解决方案,因为在 N
的某个足够大的值下,多边形变得与圆形无法区分。所以您可能只需要查找 table 几百个值。
编辑:所以我找到了一个与栅格化梯形相关的页面https://cse.taylor.edu/~btoll/s99/424/res/ucdavis/GraphicsNotes/Rasterizing-Polygons/Rasterizing-Polygons.html,但我仍在尝试弄清楚是否可以只做边缘
我正在尝试为任意 N 边形的角点生成点。其中 N 是一个非零正整数。但我试图在不需要除法和触发的情况下有效地做到这一点。我在想这可能有某种 Bresenham 的类型算法,但我似乎找不到任何东西。
我在 Whosebug 上唯一能找到的是这个,但内角增量是通过使用 2*π/N 找到的: How to draw a n sided regular polygon in cartesian coordinates?
这是 C 中那个页面的算法
float angle_increment = 2*PI / n_sides;
for(int i = 0; i < n_sides; ++i)
{
float x = x_centre + radius * cos(i*angle_increment +start_angle);
float y = y_centre + radius * sin(i*angle_increment +start_angle);
}
那么可以不做任何划分吗?
除了为 N
的所有有用值预先计算它们之外,没有避免调用 sin
和 cos
的解决方案。但是,不管 N
是多少,你只需要计算一次。 (假设你知道多边形的中心在哪里。你可能需要第二次计算来计算中心的坐标。)每个顶点都可以使用相同的旋转矩阵从前一个顶点计算出来。
预先计算值的查找 table 并不是一个不合理的解决方案,因为在 N
的某个足够大的值下,多边形变得与圆形无法区分。所以您可能只需要查找 table 几百个值。