Простое пересечение плоскости с использованием Panda3D - PullRequest
0 голосов
/ 26 февраля 2020

Пока я возился с Panda3D, чтобы посмотреть, смогу ли я использовать его для решения некоторых простых проблем геометрии c, я сделал этот небольшой тест:

def def_planes_intersect():
    """Intersects the plane defined by the xy and xz axis'."""
    xy = Plane()
    xz = Plane((LPoint3f(1, 0, 1), LPoint3f(2, 0, 1), LPoint3f(1, 0, 2)))
    if xy.intersectsPlane((0, 10, 0), (1, 0, 0), xz) is True:
        print("works")
    else:
        print("doesn't")

Он работает, как задумано, но я не понимаю, как я могу взять LPoint3f и LVector3f, которые определяют пересечение.

В документах Panda3D написано:

intersectsPlane (из: LPoint3f, delta : LVector3f, другое: LPlanef) → bool

Возвращает истину, если две плоскости пересекаются, ложь, если нет. Если они пересекаются, то from и delta заполняются параметрическим представлением линии пересечения: то есть from является точкой на этой линии, а delta является вектором, показывающим направление линии.

Что они означают под от, и дельта заполняется ?

1 Ответ

0 голосов
/ 26 февраля 2020

Итак, при написании моего вопроса я понял, что мне нужно инициализировать экземпляр LPoint3f и LVector3f, и метод заполнит их соответствующими данными. Я решил опубликовать это видение, так как там могут быть люди, которые потеряются так же, как и я

from panda3d.core import LPoint3f, Plane, LVector3f


def def_planes_intersect():
    """Intersects the plane defined by the xy and xz axis'."""
    xy = Plane()
    xz = Plane((LPoint3f(1, 0, 1), LPoint3f(2, 0, 1), LPoint3f(1, 0, 2)))
    a = LPoint3f()
    av = LVector3f()
    if xy.intersectsPlane(a, av, xz) is True:
        print("works")
        print(f"{a}\n{av}")
    else:
        print("doesn't")

Что выводит очевидный результат:

LPoint3f(0, 0, 0) 
LVector3f(1, 0, 0)
...