给定 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 的所有有用值预先计算它们之外,没有避免调用 sincos 的解决方案。但是,不管 N 是多少,你只需要计算一次。 (假设你知道多边形的中心在哪里。你可能需要第二次计算来计算中心的坐标。)每个顶点都可以使用相同的旋转矩阵从前一个顶点计算出来。

预先计算值的查找 table 并不是一个不合理的解决方案,因为在 N 的某个足够大的值下,多边形变得与圆形无法区分。所以您可能只需要查找 table 几百个值。