11

我正在尝试以 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 中循环的东西!

4

1 回答 1

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 的合适值

于 2012-06-04T00:00:29.437 回答