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中循环的东西!
// 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的合适值