如何在笛卡尔坐标系中绘制双面正多边形?

alp*_*der 23 language-agnostic polygon point-in-polygon

我一直在试图弄清楚如何编写一个简单的程序来计算x,y点来创建n个边的正多边形.有人可以给我一些不使用绘制多边形的预先存在的函数的代码示例吗?我想了解这个过程,我假设是这样的:

  1. 从半径和中心点开始选择一个角度
  2. 以某种方式计算离中心那个距离的x,y位置(怎么样?)
  3. 将360除以边数,移动该距离并从第一个x,y点绘制下一行
  4. 继续,直到角度= 360除以该数字.

假设我的假设是正确的,那么主要的是要了解如何计算x,y点.

更喜欢使用Visual Basic(甚至旧式Microsoft/Atari/Commodore BASIC)或英语中人类可读的一组步骤来回答答案.如果你必须用数学公式回答,用计算机语言来做,这样我就可以读它,即使用C或C++我也可以弄明白,但我不知道如何阅读数学符号.我正在使用的语言是类似Visual Basic的语言,除了线条图之外几乎没有图形基元.

Oli*_*rth 41

假设你想要绘制一个半径为rN面多边形,以(0,0)为中心.那么n个顶点由下式给出:

x[n] = r * cos(2*pi*n/N)
y[n] = r * sin(2*pi*n/N)
Run Code Online (Sandbox Code Playgroud)

其中0 <= n < N.请注意,cossin在这里弧度正在努力,不度(这是很常见的大多数编程语言).

如果你想要一个不同的中心,那么只需将中心点的坐标添加到每个(x [n],y [n]).如果你想要一个不同的方向,你只需要添加一个恒定的角度.所以一般形式是:

x[n] = r * cos(2*pi*n/N + theta) + x_centre
y[n] = r * sin(2*pi*n/N + theta) + y_centre
Run Code Online (Sandbox Code Playgroud)


and*_*oke 6

angle = start_angle
angle_increment = 360 / n_sides
for n_sides:
    x = x_centre + radius * cos(angle)
    y = y_centre + radius * sin(angle)
    angle += angle_increment
Run Code Online (Sandbox Code Playgroud)

实际上,在绘制线而不是仅计算角点时,还需要通过重复第一个点来"连接"多边形.

另外,如果sin()cos()弧度而不是度的工作,你想2 * PI的不是360.