我试图根据 XYZ 中的球体中心和 PHP 中的半径来获取球体表面上的随机 XYZ 坐标。目前,我的系统纯粹是随机的,希望在行星中心有一个位置。我不擅长数学,所以请多多包涵(计算障碍和阅读障碍)。
现在我只是随机混乱如下(注意 randint 是一个自定义函数,它检查rand_int,mt_rand并rand使用最新的。
$nx = randint( abs( $poo['x'] - $max_distance_x ), abs( $poo['x'] + $max_distance_x ) );
$ny = randint( abs( $poo['y'] - $max_distance_y ), abs( $poo['y'] + $max_distance_y ) );
$nz = randint( abs( $poo['z'] - $max_distance_z ), abs( $poo['z'] + $max_distance_z ) );
但我有行星 radius$pradius和行星 XYZ 中心阵列 $poo poo(x, y, z),我想我可以获得随机表面 XYZ,只是不确定。我看过其他语言,但无法理解要移植的任何内容。
更新
基于答案中提供的两种方法,我想出了以下两个功能。但是两者都无法正常运行。
以下函数仅在小行星(北极)的顶部产生陨石坑(点),即使它应该从其半径处的小行星中心计算。
function basic_spheroid_point( $cx, $cy, $cz, $r ) {
$x = randint(-$r, $r);
$y = randint(-$r, $r);
$z = randint(-$r, $r);
$dx = $x - $cx;
$dy = $y - $cy;
$dz = $z - $cz;
$dd = sqrt( ( $dx * $dx ) + ( $dy * $dy ) + ( $dz * $dz ) );
if ( $dd > $r )
return basic_spheroid_point( $cx, $cy, $cz, $r );
$dx = $r * $dx / $dd;
$dy = $r * $dy / $dd;
$dz = $r * $dz / $dd;
return array( $cx + $dx, $cy + $dy, $cz + $dz );
}
这个函数在地球的北极聚集了陨石坑,尽管也有全球覆盖的陨石坑,所以它部分起作用。
function uniform_spheroid_point($cx, $cy, $cz, $r) {
$ap = randint( 0, 359 );
$aq = randint( 0, 359 );
$dx = $r* cos( $ap ) * cos( $aq );
$dy = $r * sin( $aq );
$dz = $r * sin( $ap ) * cos( $aq );
return array( $cx + $dx, $cy + $dy, $cz + $dz );
}
小怪兽爱吃肉