我一直在试图弄清楚如何编写一个简单的程序来计算x,y点,从而创建一个n边的正多边形。有人能给我一些不使用绘制多边形的已有函数的代码示例吗?我想要了解这个过程,我假设是这样的:
假设我的假设是正确的,主要的事情是理解如何计算x,y点。
更喜欢用visual basic (或者甚至是老式的Microsoft/Atari/Commodore BASIC)或者一套人类可读的英文步骤来回答问题。如果你必须回答一个数学公式,用一种计算机语言来做,这样我就能读懂了,即使是用C或C++,我也能算出来,但我不知道怎么读数学符号。我使用的语言是一种类似Visual Basic的语言,除了线条画之外,几乎没有任何图形基元。
发布于 2011-08-26 06:58:34
让我们假设您想要绘制一个半径为r的N边多边形,以(0,0)为中心。然后n个顶点由下式给出:
x[n] = r * cos(2*pi*n/N)
y[n] = r * sin(2*pi*n/N)
其中0 <= N cos和sin
是以弧度工作的,而不是度(这在大多数编程语言中很常见)。
如果你想要一个不同的中心,那么只需将中心点的坐标添加到每个(xn,yn)。如果你想要一个不同的方向,你只需要添加一个恒定的角度。所以一般的形式是:
x[n] = r * cos(2*pi*n/N + theta) + x_centre
y[n] = r * sin(2*pi*n/N + theta) + y_centre
发布于 2011-08-26 06:57:18
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
在实践中,当绘制直线而不仅仅是计算角点时,您还需要通过重复第一个点来“连接”多边形。
此外,如果sin()
和cos()
以弧度而不是度为单位工作,则需要2 * PI
而不是360
。
发布于 2011-08-26 15:01:33
如果你想以一些错误累积为代价来使它更快,使用(复数)原始的n次方根并利用它的力量(或者使用你的语言中内置的复数支持或者手工编写乘法)。在C中:
complex double omega=cexp(2*M_PI*I/n), z;
for (i=0, z=1; i<n; i++, z*=omega) {
/* do something with z */
}
https://stackoverflow.com/questions/7198144
复制相似问题