如何获得 2 个 3d 向量之间的点数组

How to get an Array of points between 2 3d vectors

我正在寻找一种方法来获取 3d 的 2 个点之间的点数组。

我发现了什么

到目前为止,我没有找到任何 3d 的东西,当我寻找 3d 时,它只是 return 一堆 How to get distance between 2 points 而这不是我要找的东西!

我找到了 1 个关于 2d 点的好点 - here

但是我没有找到任何关于 3d 的信息,如果这是重复的,我很抱歉。

我也试过搜索 Stack Exchange Mathematics 和其他多个网页,但仍然找不到任何可以回答我问题的内容。

更多详情

我要举个例子,这样更清楚我在找什么。假设我有 2 个 3d 向量 (x1, y1, z1) 和 (x2, y2, z2)。我在这个例子中的观点是 (0, 0, 0)(10, 10, 10).

在我通过函数获得 运行 这些之后,我希望它成为 return 像这样的点数组:

[1, 1, 1],
[2, 2, 2],
[3, 3, 3]

一直到 10。

您尝试过 'for' 循环吗?

function myFunction() {

    $arr = array();

    for ($i = 1; $i < 11; $i++) {
        $arr[] = array($i, $i, $i);
    }

    return $arr;
}

$myArr = myFunction();

结果将是一个数组,每个键的数组值递增。

您可以使用查看完整数组...

print_r($myArr);

或者每个单独的值使用其键值...

echo $myArr[0][2]

回答

我现在找到了上面问题的答案。

function logPointsOnLine(array $point1, array $point2, int $points) {

  $vecs = [];
  
  $delX = $point2[0] - $point1[0];
  $delY = $point2[1] - $point1[1];
  $delZ = $point2[2] - $point1[2];

  for($i = 0; $i < $points; $i++) {
    $newX = $point1[0] + $delX / ($points - 1) * $i;
    $newY = $point1[1] + $delY / ($points - 1) * $i;
    $newZ = $point1[2] + $delZ / ($points - 1) * $i;
    array_push($vecs, array($newX, $newY, $newZ));
  }
}

如果你想 运行 它的一种方法是:

$vec1 = array(10, 12, 32);
$vec2 = array(15, 60, 25);
$amt = 10;

$points = logPointsOnLine($vec1, $vec2, $amt);

print_r($points);