Это называется векторной математикой.
«Координаты» - это особый вид вектора, относительно некоторого происхождения (в вашем случае x=0,y=0,z=0
). По этой причине, разница x1-x2, y1-y2, z1-z2
является вектором от точки 2 до точки 1. Обратного x2-x1, y2-y1, z2-z1
является вектором от точки 1 до точки 2.
направления вектора является обычно определяется игнорированием его длины или, альтернативно, путем установки его длины в единицу. Поэтому нам нужно сначала определить длину, которая равна L = √(x*x + y*y + z*z)
. Мы можем определить вектор x/L, y/L, z/L
, который указывает в том же направлении, что и x,y,z
, но с длиной один.
Наконец, чтобы сравнить два направления, мы можем рассчитать внутренний продукт этих двух направлений: x1/L1 * x2/L2 + y1/L1 * y2/L2 + z1/L1 * z2/L2
. Если это одно, они указывают в одном направлении. Если это 0, они ортогональны. Если это -1, они указывают в противоположных направлениях.
Как вы можете видеть, вектор 0,0,0 имеет длину 0 и не имеет направления. Это может усложнить ситуацию.
В OpenCV: class Vec. Функция длины называется norm(v)
, а внутренний продукт называется v1.mul(v2)
MSalters это моя другая идея, если я беру x & y и вычисляю значение sin. Думаю, я могу взять направление. Но для этого у меня нет хорошей идеи для уровня реализации. если бы вы могли объяснить это, это тоже будет очень полезно. – Alan
это моя другая идея, если я беру x & y и вычисляю значение sin. Думаю, я могу взять направление. Но для этого у меня нет хорошей идеи для уровня реализации. если вы могли бы это объяснить, это тоже будет полезно – Alan
@RahulaCol: Нет, 'sin (x/y)' не даст значимого результата. Вы можете использовать 'atan2 (y, x)'. – MSalters