我正试图以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中循环的东西!
答案 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值