Линия
set direction [expr -($norm1*$xB)+($norm2*$yB)+($norm3*$zB)]
выглядит неправильно, хотя это не может быть причиной ваших результатов, поскольку basePoint
является источником. Разве это не должно быть
set direction [expr -(($norm1*$xB)+($norm2*$yB)+($norm3*$zB))]
Edit:
У меня был другой взгляд, и я вижу некоторые проблемы. Во-первых, ваше определение d
неверно. Вы использовали направление линии вместо плоскости нормали и topoint
линии вместо refPoint
. Я хотел бы отметить, что первое, вероятно, произошло, потому что вы использовали причудливую схему именования и назвали компоненты направления линии norm11
, norm12
и norm13
! Эта строка кода должна быть
set d [expr -(($norm1*$xb)+($norm1*$yb)+($norm1*$zb)+$direction)]
Вторая проблема, которую я вижу, состоит в том, что s
должно быть d
/ n
, а не n
/ d
.
Edit2:
Хорошо, теперь попробуйте удалить тест на d
, так как я не вижу смысла в этом. Конечно, вам все равно нужен тест на n
, поскольку теперь это ваш знаменатель, и если он равен нулю, это означает, что линия параллельна плоскости. Это единственное обстоятельство, при котором пересечение не будет (при условии, что линия рассматривается как бесконечно длинная).