|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
ок. на входе имеем Local.oz - нормаль, rotate - угол поворота. расчитываем Local.ox, Local.oy и матрицу перевода мировых координат в систему координат блока. матрицы приняты 4х мерными.
используя arbitrary axis algorithm считаем неповернутые Local.ox, Local.oy, тут YWCS и ZWCS соответственно равны 0,1,0 и 0,0,1 Код:
Код:
Код:
Код:
|
|||
|
||||
Вообще-то проще 6 раз перейти из одного пользовательского пространства в другое и списать значения 210 пары переведенные в ПСК.
Чего голову морочить? Правда если модель перегружена объектами могут тормоза начаться, но можно попытаться. Можно из линий ежика сделать, объединить их в блок, развернуть и взорвать, получив координаты концов линий. Что-то чую я, трудно будет математикой это сделать. |
||||
|
||||
Вот, сделано через Ж, но работает.
Код:
Получаем (z (то есть то, что дали) -Z X -X Y -Y) Пример (vektor-translate '(-0.34202 0.0 0.939693) 1.91986) Получаем: ((-0.34202 0.0 0.939693) (0.34202 0.0 -0.939693) (0.883023 0.342018 0.321394) (-0.883023 -0.342018 -0.321394) (-0.321392 0.939693 -0.116977) (0.321392 -0.939693 0.116977)) Чуток подправил функцию. Теперь она просто летает, поскольку не прорисовывает. Создаем блок, в нем другой блок, там его крутим и все удаляем. Все происходит чисто в памяти, без вывода графики на экран, как раньше. Последний раз редактировалось Supermax, 23.11.2009 в 03:31. |
||||
|
||||
Supermax, Привет!
Я честно пытался понять, что же необходимо получить. Прочел тему полтора раза, но не понял. Нахождение векторов, их преобразование и вращение, можно делать гораздо проще. Как уже говорилось, либо по формулам аффинных преобразований, либо через векторы и функцию trans. Поясните для меня, что именно необходимо получить...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Я дочитал еще те 0.5 раза, которые не смог Евгений и так же не понял
По поводу trans, OCS и 3D у меня в закладках потрясающая и исчерпывающая тема gile. Там требуется регистрация, но советую почитать. About trans and OCS in 3D Пример оттуда. Получет вектор, который пишется в 210 поле Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Поясняю (ну как смогу, конечно).
Что такое 210 пара? Можно много красивых слов находить, но по детски очень трудно сформулировать. 210 пара - ось Z объекта в сторону положительных значений. Берем любой примитив, лучше МTEXT, поворачиваем его туда-сюда и наигравшись смотрим куда смотрит его ось Z, тобишь, читаем значение нормали (210 пары). Что такое единичная сфера и единичный вектор смотрим в википидии. Но положение тела в пространстве определяется не только точкой вставки и ориентацией Z оси объекта, а еще и углом поворота вокруг этой оси. Хотя можно задавать просто две точки, как в MTEXT-е (210 и 11 пары). Мне надо отложить по оси Y объекта необходимую длинну. Для этого мне надо определить, куда смотрит ось Y объекта. Имея единичный вектор, который соответствует оси ординат объекта я могу строить вокруг него нужные мне геометрические фигуры, как бы он не был повернут в пространстве. Да я тупо сделал функцию. Нарисовал "ежик" с 6-ю лучами и задавая ему поворот и направление нормали получаю все 6 векторов. Есть один вектор и угол поворота вокруг него, надо найти все остальные вектора. Да гляньте вы на список, что возвращается. если Z = первой координате, то -Z - второй и все остальные тоже отличаются только знаками. Последний раз редактировалось Supermax, 23.11.2009 в 10:46. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
кстати отрицательные значения не нужны, они автоматом получатся при откладывании отрицательной длины в нужном направлении
имеем единичный вектор dir нужного направления, нужно отложить 5 едениц в обе стороны dir*5 в положительном dir*(-5) в отрицательном |
|||
|
||||
Это вектор, причем ничего не мешает использовать "длинный" вектор, т.е. его длина не обязательно должна равняться единице! Это верно для всех примитивов акада...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Цитата:
Для ручного указания направления сойдет что угодно, а для изменения ориентации объекта? Допустим, мне надо повернуть объект вокруг его оси X на 90 градусов по часовой стрелке. Лишние направления не лишни. Даже первый список, который вегда равен тому, который задаешь аргументом не грех сравнивать с исходным. Вот кто мне скажет почему надо сначала поворачивать, а потом менять нормаль? В свойстве "Rotation" ведь указан поворот вокруг оси, которая задана нормалью. Если нормаль крутишь-вертишь он не меняется, а стоит его поменять - нормаль летит к чертям. Вот переставьте в моей функции вот эти две строчки местами. Код:
|
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Вот кто мне скажет почему надо сначала поворачивать, а потом менять нормаль?
3д повороты зависят от порядка в котором они произведены, поменяешь их местами - получишь другой результат, зависят от системы координат в которой они производятся. вектор ты крутишь в мировой системе координат, а угол задаешь уже в локальной ск объекта Имхо правильней задавать не угол а направление 0x, угол - для наглядности в 2D, в 3D его наглядность теряется Последний раз редактировалось zamtmn, 23.11.2009 в 12:16. |
|||
|
||||
Цитата:
Попробуй для любого объекта задать длинный вектор или как вариант - удлинить его.. Как пример - удлиняем вектор в 11 раз: Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
zamtmn, не, "ты Борис не прав". Угол, что значится в свойстве Rotation ни к каким пространствам отношения не имеет. Он (по идее) всегда обозначает поворот вокруг нормали. То есть вокруг оси Z объекта.
В какую ты систему не пересчитывай нормаль, а угол всегда один и тот же. Но процесс установки угла и нормали, если это делать путем замены точечных пар, у блока, к примеру, сбивает настройку точки вставки. Причем в 10 паре указано одно, а vla-get-InsertionPoint показывает совсем другое. И врет при этом 10 пара. Если сделать vla-put... то блок становится на свое место, а 10 пара, угол поворота и нормаль остаются прежними. Глюки, короче. Тут тоже видимо глюк. Этот Rotation, ведет себя так, буд-то объект вращают вокруг оси Z пространства, где расположен объект. Я правда только на блоках и MTEXT-ах практиковался. Елпанов Евгений, ценная инфа, могет пригодиться. Правда в свете глюковатости самого када, как бы глюков не прибавилось. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
в системе координат блока угол это поворот вокруг 0,0,1, а в мировой системе системе поворот вокруг нормали блока. при переходе между системами значение угла не меняется, меняется вокруг чего он задает вращение.
Не знаю как в лиспе а в dxf файле значение точки вставки хранится в системе координат объекта, такчто ее тоже нужно пересчитывать в мировую систему, приведеные мной выше куски кода работают при чтении dxf файла, возможно в лиспе точка вставки автоматом переведена в МСК |
|||
|
||||
Supermax, Есть одна тонкость, но ее необходимо учитывать и при передаче единичного вектора. Если ты присваиваешь одинаковый вектор нормали нескольким объектам и для каждого объекта вычисляешь этот вектор заново, может оказаться, что объекты лежат в разных плоскостях и соответственно не могут пересекаться, объединяться и.т.д... А всему виной точность. Т.е. в одном месте будет 0.0 а в другом 1е-16. и уже разные вектора.
Я, обычно, использую небольшое округление векторов. Это позволяет меньше зависеть от точности акада...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
point -> WCS
insert -> OCS Я у себя на сайте по этому вопросу развлекался...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
to Supermax
если тебе надо сделать boundingBox для повернутого mtexta то оно вот, спасибо VVA. - это функция из экспресс тулз, что подается ей на вход остается только гадать, но вот так работает: Код:
Код:
|
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Может кому пригодится.
http://www.caduser.ru/forum/index.ph...D=44&TID=41129 http://www.caduser.ru/forum/index.ph...D=44&TID=27943
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
zamtmn,
Цитата:
Изменение этого параметра никоим образом не должно изменять значение нормали объекта. Куда ось Z объекта была направлена, туда и должна остаться быть направленной. А она рушиться. И точка вставки блока порою улетает. Во! Sleekka, Функция acet-geom-textbox написана без учета глючности Автокада. Если объект не повернут - она работает, а если повернут в двух плоскостях - рамка улетает черт знает куда (при объекте MTEXT). Код:
Немного размерность массива подправил. Причем! Если объект TEXT - все тип топ. А если MTEXT - и в 2006, и в 2007, и в 2010 - рамка улетает вниз. Уж от типа объекта все никак не должно зависить. Еще малость изменил, чтобы рамку рисовало из любой ПСК. Надо наверное и в функцию оформить. Sleekka, будь добр, переведи на русский язык функции и укажи значения аргументов. Я в первом посте ссылку дам. Сам я все понял, но "надо Федя, надо". Pastor, спасибо за вклад. Последний раз редактировалось Supermax, 24.11.2009 в 19:42. |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | Kryaker | Разное | 554 | 14.11.2023 11:59 |
Определение высот рельефа по близлежащим точкам | dextron3 | Программирование | 21 | 10.11.2011 13:14 |
Интерполяция между двумя точками | postbudka | Программирование | 27 | 21.05.2009 10:00 |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |
Координаты точки, лежащей на полилинии | Al_Taron | Программирование | 1 | 27.11.2006 09:45 |