到目前为止,我一直在尝试这样的方法,但是没有运气:
int dx = 0;
int dy = 0;
int x = 0;
int y = 0;
for (int i = 0; i < maxPoints; i++)
{
dx = sin(i * PI / 2);
dy = cos(-i * PI / 2);
x += dx;
y += dy;
plot(x, y);
}
编辑:更多信息
我正在开发3D通过模拟多米诺骨牌演示子弹物理引擎使用的游戏应用程序。与其手动将多米诺骨牌放到场景中,不如我想使用一些数学方法为我做这件事:)
对于任何对此感兴趣的人,它都在GitHub上。
#1 楼
弄清楚了:)现在沿着该函数生成的X和Y坐标放置多米诺骨牌。问题中的原始代码是从中心位置或原点向外绘制点波,这不是我想要的。我需要的是让每个点跟随
Archimedean spiral
,并在螺旋之间留出一定的距离。 最初,我使用
integer
值来存储x
和y
坐标,但这通过截断floating point
值以将其存储在integer
数据类型中而引起了精度错误。以下示例相对于
maxPoints
值沿螺旋连续生成点。 float x = 0;
float y = 0;
float angle = 0.0f;
// Space between the spirals
int a = 2, b = 2;
for (int i = 0; i < maxPoints; i++)
{
angle = 0.1 * i;
x = (a + b * angle) * cos(angle);
y = (a + b * angle) * sin(angle);
plot(x, y);
}
该项目的代码在GitHub上,您将需要Bullet和freeglut
评论
$ \ begingroup $
如果您解释了问题的根源以及为解决此问题而进行的更改,那么答案会更好。
$ \ endgroup $
– trichoplax
2015年12月21日在20:25
$ \ begingroup $
请立即更新问题并提供更多信息。
$ \ endgroup $
–大卫
2015年12月22日在21:22
#2 楼
这实际上不是这个问题的直接答案(无论如何已经有答案),但是可能会吸引那些想要在3D中实现此算法的人。我不得不尝试实现此算法来生成使用Python在Blender中进行3D螺旋处理(可以使用2D的PIL或Matplotlib轻松转换为图形)。因此,这里是算法和结果:
import bpy
from math import cos, sin
S = bpy.context.scene
def add_archimedian_spiral( size = 0.1, length = 500, height = 1, name = 'archispiral' ):
mesh = bpy.data.meshes.new( name = name )
o = bpy.data.objects.new(name, mesh)
o.location = (0,0,0) # place at object origin
S.objects.link( o )
z = 0
verts = []
for i in range( length ):
angle = 0.1 * i
x = ( 2 * size * angle ) * cos( angle )
y = ( 2 * size * angle ) * sin( angle )
z += i / 10000 * height
verts.append((x,y,z))
edges = []
for i in range( len( verts ) ):
if i == len( verts ) - 1: break
edges.append((i, i+1))
mesh.from_pydata( verts, edges, [] )
add_archimedian_spiral( size = 0.2, length = 500, height = 6 )
评论
$ \ begingroup $
除了在for循环的每次迭代中增加Z高度之外,这是否会执行相同的操作?
$ \ endgroup $
–大卫
15年12月24日在9:37
$ \ begingroup $
除了它始终是对称的以外,几乎是其他的东西(不是原来的a和b,而是使用统一的大小参数)。
$ \ endgroup $
–TLousky
15年12月24日在9:54
评论
问题似乎是所有变量都是int。尤其是dx和dy可能会变为0。