Нахождение угла между двумя единичными векторами в трех измерениях - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь провести какое-то базовое 3D-моделирование, но прошло 20 лет с тех пор, как я изучил этот материал в старшей школе ...

Если у меня есть два вектора в трех измерениях, как мне найти уголмежду ними.Например, у меня есть один вектор (3,2,1) и другой вектор (4, -5,6), как бы я нашел угол (в градусах или радианах) между ними.Если я помню, была какая-то формула для этого.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2016

Это делает трюк:

atan2(sqrt(dot(cross(a, b), cross(a, b))), dot(a, b))

как лямбда-функция Python:

import math, numpy

angle = lambda a, b: math.atan2(
    math.sqrt(
        numpy.dot(*([numpy.cross(a, b)]*2))
    ), 
    numpy.dot(a, b)
)

результаты приведены в радианах:

In : angle([1.,1.,1.], [-1.,1.,1.])
Out: 1.2309594173407747

In : angle([0.,1.,0.], [0.,0.,1.])
Out: 1.5707963267948966

работает в 2-х измеренияха также:

In : angle([0.,1.], [1.,0.])
Out: 1.5707963267948966

In : angle([0.,1.], [1.,1.])
Out: 0.7853981633974483
0 голосов
/ 24 февраля 2011

Здесь Вы идете

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