Экстраполировать линию за две известные точки

1

Я действительно сосать математику. Нет, лучшее объяснение: я не знаю, как интерпретировать математическую нотацию. Мой мозг просто не мог его интерпретировать. Вот почему я прихожу к сообществу разработчиков, чтобы помочь "перевести" математику на язык, который я действительно понимаю.

У меня есть два набора координат в трехмерном пространстве, представляющих линию визирования.

Vector1(eyes) x=10 y=10 z=4
Vector2(lookingat) x=10 y=8 z=4.785

Как вычислить точку с этими двойными значениями за пределами значения? например, что лежит на 2 балла за пределами линии, которую мы смотрим? какое место в космосе было бы?

Вкратце:

Как экстраполировать заданную точку за линию, состоящую из двух векторов с заданным двойным значением вдоль линии.

a known
 \
  \
   \
    b known
     ?    
      ?     + 3
       ?
        c what is this value...

редактировать

С помощью ответа @Thrustmaster я придумал это замечательное решение. Большое спасибо: D

private Vec3 calculateLine(Vec3 x1, Vec3 x2, double distance) {
    double length = Math.sqrt(multiply(x2.xCoord - x1.xCoord) + multiply((x2.yCoord - x1.yCoord)) + multiply((x2.zCoord - x1.zCoord)));
    double unitSlopeX = (x2.xCoord-x1.xCoord) / length;
    double unitSlopeY = (x2.yCoord-x1.yCoord) / length;
    double unitSlopeZ = (x2.zCoord-x1.zCoord) / length;
    double x = x1.xCoord + unitSlopeX * distance;
    double y = x1.yCoord + unitSlopeY * distance;
    double z = x1.zCoord + unitSlopeZ * distance;
    return Vec3.createVectorHelper(x, y, x);
}
private double multiply(double one) {
    return one * one;
}
Теги:
opengl

1 ответ

7
Лучший ответ

Вам нужно начать искать базовую трехмерную геометрию координат.

В 3D уравнение можно записать в виде:

x = x1 + unitSlopeX * distance
y = y1 + unitSlopeY * distance
z = z1 + unitSlopeZ * distance

.. где (x1, y1, z1) может быть любой точкой на линии; в этом случае (10, 10, 4).

Следующий набор неизвестных - это все 3 unitSlopes. Чтобы вычислить его, просто вычтите две точки (это приведет к вам вектор) и разделите на длину вектора.

length = sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)
unitSlopeX = (x2-x1) / length
unitSlopeY = (y2-y1) / length
unitSlopeZ = (z2-z1) / length

Теперь, чтобы, наконец, получить вашу третью координату, просто подключите расстояние (любое значение) к трем уравнениям в начале этого сообщения.


В векторной нотации:

V = V1 + t * (V2 - V1) / | V2 - V1 |

где t - любое вещественное число.

  • 0
    Благодарю. Я только начинающий 3d программист, и все, над чем я работал раньше, - это простая интреполяция, в которой гораздо больше примеров в Интернете. Экстраполяция немного озадачила меня, но это мне очень поможет. Вы случайно не знаете каких-либо ресурсов, где они объясняют это так, как вы это сделали? с "нормальным" примером математики? Я действительно заинтересован в этих вещах, чтобы узнать их.
  • 1
    Мне очень жаль, но я не знаю ни о каких ресурсах. Я бы порекомендовал собирать книги по координатной геометрии. Может быть, вы можете начать с 2D, большинство концепций в этой области могут быть просто расширены до 3D. Например, вышеупомянутые 3 уравнения называются «параметрическими уравнениями трехмерной линии» и являются простыми расширениями двумерных линий.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню