Я создаю генератор дерева, и я нахожусь в точке, где я хочу, чтобы подветви разветвлялись под прямым углом от текущей ветки в случайных направлениях. У меня есть трехмерный вектор, определяющий направление текущей ветки, но я не могу понять, как преобразовать его в направление для подветви.
Я гуглил проблему, а также искал здесь, но я могу найти только связанные проблемы, и, видимо, я просто недостаточно умен, чтобы понять, как применить их к моей проблеме.
Итак, что должно произойти, учитывая определенный трехмерный вектор v , который может указывать в любом направлении:
Или проще говоря:
Я делаю это на Java; вектор хранится в javax.vecmath.Vector3f. Я знаю об аффинных преобразованиях, но, насколько я понимаю, они вращаются вокруг глобальных осей, и мне нужно вращать свой вектор вокруг локальных осей, определенных им самим, если это имеет смысл.
Может ли кто-нибудь помочь мне решить эту проблему?
Если известен вектор ветвления , то любой перпендикулярный к нему вектор, скажем будет иметь точечный продукт .
Так,
Кажется, это самый простой способ получить «случайные» ветки.
Если вы хотите контролировать длину вектора, вы всегда можете нормализовать полученный вектор и получить результирующий вектор используя
где - желаемая длина вектора.
Если является , то вы получите сингулярность при попытке разделить на .
Однако, поскольку является , это никак не влияет на скалярный продукт, поэтому мы можем выбрать любой мы хотим.
Решить для выбрав некоторые , а затем разрешить быть «свободным» (то есть вы можете выбрать любой ). Однако при этом вы столкнетесь с проблемой, если является также.
Если оба , то вы вынуждены установить (чтобы сохранить скалярный продукт как для перпендикулярности) при наличии (то есть они бесплатные).
Позволять быть единичным вектором в задающий прямое направление текущей ветки, заканчивающейся в точке . Эта ветвь исходила из предыдущей точки , и был единичный вектор определяя предыдущую ветвь, заканчивающуюся на Нам понадобится этот вектор для следующего шага!
Обратите внимание, что . Пара , дополняется к ортонормированному базису содержащий как член. Следует, что и являются ортогональными единичными векторами в плоскости, ортогональной .
Чтобы получить случайный единичный вектор в этой плоскости порождают равномерно распределенную и положи
Сиддхарт Бхат
Пепейн Шмитц
Дэвид Куинн
Пепейн Шмитц
Пепейн Шмитц
Дэвид Куинн
Сиддхарт Бхат
Дэвид Куинн
Сиддхарт Бхат