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

时间:2012-06-03 23:08:14

标签: php fibonacci fractals procedural-generation

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

我从螺旋上的excellent source收集了以下信息:

  

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

     

(3)极坐标方程:r(t)= at [a is constant]   由此得出结论   (2)参数形式:x(t)= at cos(t),y(t)= at sin(t),
  (1)中央   等式:x²+y²=a²[arc tan(y / x)]²。

This question触及了星系的产生,但是响应是分散的,而且仍然过于复杂,因为我需要的东西(也就是说,我的数学愚蠢的头脑无法理解它们)。

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

这篇数学论文讨论了a formula that describes the structure of spiral galaxies

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

1 个答案:

答案 0 :(得分: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
}

当你遇到这样的参数方程时,参数变量的共同点是t,这意味着时间。所以你可以考虑将增加的t值插入到函数中,并获得随着时间的推移逐渐变化的坐标。

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