Скрипт на питоне, для вектороной математики я использовал pymobu, интересный и полезных проект на мой взгляд для скриптования в билдере.

Чтобы воспользовать математической частью, нужно подключить модуль datatypes, а затем выполнить вызов insertMathClasses.

По списку поддерживаемых математических операций на данный момент к сожалению нет документации, но можно легко разобраться глянув исходник datatypes.

Теперь по поводу алгоритма. Следующая функция позволяет спроецировать точку на линию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from pyfbsdk import *
from datatypes import *

insertMathClasses()

def ClosestPointOnLine(A, B, P):
a_to_p = P-A
a_to_b = B-A

atb2 = abs(a_to_b)
atp2 = abs(a_to_p)

a1 = a_to_p.Normalize()
a2 = a_to_b.Normalize()

atp_dot_atb = a1.Dot(a2)

t2 = atp_dot_atb * atp2 / atb2;

a_to_b = B-A
res = FBVector3d( A.X + a_to_b.X * t2, A.Y + a_to_b.Y * t2, A.Z + a_to_b.Z * t2 )
return res
Питон: Проецирование точки на линию
Метки:            

2 thoughts on “Питон: Проецирование точки на линию

  • Среда Февраль 9, 2011 на 08:24
    Постоянная ссылка

    Hey, this is Scott Englert, the author of pymobu. I came across your post and wanted to say thanks for downloading it and giving it a try.

    I know the documentation is lacking on some of the methods. When I have time to go back and continue development, I want to add more examples and descriptions.

    I think the matrix and vector maths is probably my favorite section of the project just because there is a clear lack of support and very fundamental to 3D.

    If you want to contribute to the project, just send me a message or if you have any comments, let me know. I haven’t too many responses so I haven’t move too much more forward with it lately.

    Thanks again and it’s good to know someone is using it out there!

    -Scott

  • Среда Февраль 9, 2011 на 22:24
    Постоянная ссылка

    Hello Scott,
    thank you for your pymobu, It’s really useful (math part for me is very helpfull)!
    I have added a link to you project in my links section.
    Also I’ll send you an e-mail about contribute.

    I wish you good luck!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *