R: Матричное умножение и линейная алгебра - проекция от точки к прямой - PullRequest
0 голосов
/ 22 сентября 2018

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

A<-cbind(Ax,Ay,Az)
head(A)

      [,1]   [,2]     [,3]
[1,] -9.813 78.541 -114.448
[2,] -9.788 78.530 -114.450
[3,] -9.760 78.516 -114.454
[4,] -9.645 78.439 -114.478
[5,] -9.604 78.406 -114.488
[6,] -9.551 78.411 -114.513

Я могу сделать матрицы векторов между датчиками следующим образом:

vBC<-cbind(C-B)
head(vBC)

       [,1]   [,2]     [,3]
[1,] 24.980 61.929 -154.502
[2,] 25.050 61.939 -154.499
[3,] 25.081 61.913 -154.534
[4,] 25.097 61.896 -154.557
[5,] 25.123 61.833 -154.618
[6,] 25.133 61.780 -154.620

Теперь я пытаюсь получитьпроекция M из точки A на линию BC, так что точка (vBC, vMA) = 0, означая, что два вектора перпендикулярны.У меня есть формула для M: M = B + точка (vBA, vBC) / точка (vBC, vBC) * vBC.Это отлично работает для тестового примера:

testa<-c(1,2,3)
testb<-c(5,6,7)
vtestab=testb-testa
testp<-c(9,9,9)
vtestap<-testp-testa
testm=testa + dot(vtestap,vtestab)/dot(vtestab,vtestab) * vtestab
vtestmp=testp-testm
dot(vtestmp,vtestab)

[1] 0

При масштабировании до реальных данных у меня возникают проблемы.Теперь я знаю, что функция pracma dot () при применении к матрицам умножает столбцы вместе.Итак, насколько я понимаю, мне нужно переставить векторные матрицы в этой функции, чтобы я получал одно произведение точек за кадр времени.Вот мой код:

vBC<-cbind(C-B)
vBA<-cbind(A-B)
w<-dot(t(vBA),t(vBC))/dot(t(vBC),t(vBC))
M = B + w * vBC
vMA<-cbind(A-M)
dot(t(vMA),t(vBC))

В векторе, созданном точкой (t (vMA), t (vBC)), я получаю 0 ИНОГДА.Тем не менее, есть широкий диапазон результатов, которые не равны 0. Я не уверен, как это может быть.Я пытаюсь вычислить координаты M в каждый момент времени так, чтобы точка (t (vMA), t (vBC)) ВСЕГДА 0.

Где я иду не так?Есть что-то концептуальное, что мне не хватает?Я неправильно обращаюсь с матрицами?Я не математик, я просто пытаюсь получить эти данные, чтобы иметь смысл.


EDIT1: Точнее, он возвращает 0 для перпендикулярных векторов для 15 из 1000 кадров.

Perp<-(dot(t(vMA),t(vBC)))==0
sum(Perp,na.rm=TRUE)

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