循环通过描述螺旋的公式来生成XY坐标

Nic*_*ick 11 php procedural-generation fractals fibonacci

我试图以xy(2D)坐标的形式生成一个螺旋星系 - 但数学并不是我的强项.

我从螺旋上的一个优秀来源收集了以下信息:

半径r(t)和角度t与最简单的螺旋,阿基米德的螺旋成比例.因此,等式是:

(3)极坐标方程:r(t)= at [a是常数].
由此得出
(2)参数形式:x(t)= at cos(t),y(t)= at sin(t),
(1)中心方程:x²+y²=a²[arc tan(y/x) ]².

这个问题有点触及了星系的产生,但是反应是分散的,而且仍然过于复杂,因为我需要的东西(也就是说,我的数学愚蠢的头脑无法理解它们).

基本上,我需要做的是在PHP~5000次循环螺旋公式,以在513x513 XY网格上生成点.网格的大小和所需的点数可能在将来发生变化.更好的方法是将这些点与螺旋的原点进行权衡,无论是频率还是偏离精确的数学公式,与星系的实际外观类似.

这篇数学论文讨论了一个描述螺旋星系结构的公式.

完全失去我的是如何将数学公式转换为我可以在PHP中循环的东西!

goa*_*oat 6

// a is 5 here
function x($t){ return 5 * $t * cos($t); }
function y($t){ return 5 * $t * sin($t); }

for ($t = 0; $t < 50; $t += 0.01) {
    $xyPoint = array(x($t), y($t));
    // draw it
}
Run Code Online (Sandbox Code Playgroud)

当你遇到像这样的参数方程时,它常见于参数变量t,这意味着时间.因此,您可以考虑将增加的t值插入到函数中,并获得随着时间的推移逐渐变化的坐标.

你需要选择自己的a值,t的范围和t的增量步长.这取决于您的要求.cos()和sin()的最大值都是1,如果这有助于你根据你的画布大小找出a和t的合适值