如何获得 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);
我正在寻找一种方法来获取 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);