2015-07-29 3 views
0

Это скорее математическая загадка, чем конкретная кодировка, но я уверен, что мне тоже понадобится помощь.VBA for MicroStation - определение положения относительно угла

Я пишу код для размещения ячейки MicroStation в выбранном масштабе, а затем для использования команд MicroStation для растягивания части ячейки в другое место. По-моему, кодирование было завершено, поскольку оно работало в моей тестовой среде, но при тестировании с некоторыми пользователями он сразу же порвал. Понадобилось некоторое время, чтобы установить причину, и это вызвано представлением на экране с примененным вращением.

Мой код основан на захвате позиции пользователя для начала размещения ячейки, полученной с помощью point3d, тогда мне нужно выбрать другую точку на заданном расстоянии вдоль XY от последней точки, это регулируется путем факторизации в выбрана шкала «CellScale как целое» так что моя вторая позиция определяется как:

PosFlood.X=Pos1.X + (0.35 * CellScale) 
PosFlood.Y=Pos1.Y + (0.007 * CellScale) 

Но этот расчет не так, когда вид поворачивается. Я смог получить угол поворота и установить его как «ViewAngle as Double», но я не знаю, какую формулу использовать для вычисления моей второй позиции, я считаю, что мне нужно использовать sin и cos, но все поиски вызвали меня короткая.

Надеюсь, в киберпространстве есть математик, который может поставить меня на правильный путь?

Спасибо - Марк

ответ

0

MicroStation является 3D, и использование углов не является хорошим способом справиться с вращением. Общим подходом в 3D-математике является использование матрицы вращения, которая полностью поддерживается MicroStation VBA классом Matrix3D.

Вы можете получить матрицу вращения вида MicroStation, используя View.Rotation. Вы найдете много методов, которые работают на Matrix3D в справке MicroStation VBA. Эти методы включают в себя вычисление матрицы масштабирования и умножающих матриц (например, scaling matrix . rotation matrix) для получения вращения для вашей ячейки.

Смежные вопросы