Разница пересечения плоскости / луча с проекцией точки / плоскости - PullRequest
0 голосов
/ 07 ноября 2018

Я нашел решение для кода пересечения плоскости лучей в Википедии, который работает и где я просто решаю систему линейных уравнений.

Позже я нашел некоторый код для точки на плоскую проекцию, который, очевидно, реализован по-разному, а также дает различные решения при определенных условиях.

Однако я не совсем понимаю, в чем разница между проекцией точки вдоль вектора и пересечением луча (построенной по точке и вектору). В обоих случаях я ожидал бы просто найти точку, где луч пересекает плоскость ?!

Есть ли где-нибудь фигура, иллюстрирующая разницу?

struct Plane {
  glm::vec3 _normal;
  glm::vec3 _point;
};

glm::vec3 intersection(const Plane &p, const glm::vec3 &point, const glm::vec3 &direction) {
  // See: https://en.wikipedia.org/wiki/Line%E2%80%93plane_intersection
  const float t = glm::dot(p._normal, point - p._point) / glm::dot(p._normal, -direction);
  return point + t * direction;
}

glm::vec3 orthogonalProjection(const Plane &p, const glm::vec3 &point, const glm::vec3 &direction) {
  // from /4334224/kak-sproetsirovat-tochku-na-ploskost-v-3d
  const float t = -(glm::dot(point, direction) - glm::dot(p.getOrigin(), p.getNormal()));
  return point+ t * direction;
}

1 Ответ

0 голосов
/ 07 ноября 2018

Луч - это бесконечная линия, поэтому у него есть направление. Пересечение луча с плоскостью означает нахождение линии, проходящей через плоскость.

Точка - это безразмерная точка, подвешенная где-то в пространстве. Проецирование точки на плоскость означает попадание луча, который проходит через точку и перпендикулярно плоскости (называемой «нормальной»), и видит, где она приземляется.

Луч уже имеет направление, а точка - нет. Направление, выбранное для проецирования точки, является перпендикулярным плоскости просто потому, что именно так определяется проекция.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...