Найти плоскости, ортогональные известной плоскости - PullRequest
0 голосов
/ 15 января 2019

Я надеялся получить здесь помощь. Я геолог, поэтому мой математический фон не так силен, как должно быть. У меня есть геологическая ошибка, которую я оцифровал в программе CAD. Я разместил три репрезентативные точки на плоскости разлома и извлек эти координаты. Я нашел единичный вектор этой плоскости, используя следующий код:

p1 = np.array([503562, 2811504, 1771], dtype='float64')
p2 = np.array([504122, 2810766, 1820], dtype='float64')
p3 = np.array([504325, 2811311, 1042], dtype='float64')

#  Calculate vectors
v1 = p3 - p1
v2 = p2 - p1

#  Find the cross product (vector normal to the plane)
cp = np.cross(v1, v2)

#  Assign to a, b and c for components of plane equation
a, b, c = cp

#  Calculate d component with a dot product and the following equation:
#    a*x3 + b*y3 + c*z3 = d
d = np.dot(cp, p3)

#  Find the unit vector
uv = cp / (cp**2).sum()**0.5

Этот вектор представляет плоскость, которая является моим максимальным направлением непрерывности (геологический термин). Мне нужно получить две плоскости, которые находятся под углом 90 градусов к плоскости, определенной выше. Я знаю, что это, вероятно, довольно просто с точки зрения линейной алгебры, но сейчас я в растерянности. В конце концов мне это нужно, чтобы получить удар и провал трех плоскостей непрерывности, определенных выше.

Редактировать: добавил картинку для наглядности

Синяя функция - ошибка. Зеленый мяч для регби - мой поисковый эллипс. Мне нужно выяснить плоскости, которые определяются этой формой. Я использовал эти зеленые точки, оцифрованные на разломе, чтобы вычислить первую плоскость. Я не знаю, как получить два других

fault and search ellipse

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Из вашего описания, это то, что я считаю, что вы хотите:

  • Для удара вам нужно пересечение вашей плоскости и горизонтальной плоскости (так, чтобы это было произведение вашего единичного вектора и вектора (0,0,1).

  • Для провала вы хотите получить перекрестное произведение вектора единицы вашего самолета и вектора единицы удара.

Я согласен с другими комментаторами - возможно, самостоятельно разберем математику ... тогда вы можете перейти к stackoverflow, если у вас возникнут проблемы с его реализацией в Python

0 голосов
/ 15 января 2019

Итак, если вы довольны такими самолетами:

У вас уже есть cp, определяющий вашу "плоскость непрерывности". ortho1 = np.cross(v1, cp) даст вам одно ортогональное направление к cp, т.е. к одной из ваших возможных запрашиваемых плоскостей. Тогда ortho2 = np.cross(cp, ortho1) даст вам второй соответствующий.

...