|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
TransformBy таки в лиспе есть -
http://www.technopark.spb.ru/files/i...sp/tmatrix.lsp ну и матрицу получить тоже должно быть можно |
|||
![]() |
|
||||
zamtmn, Supermax,
Хватит ругаться! Вы оба неправы... Во первых, матрицу можно применить к любому объекту, через лисп. Во вторых, все объекты автокада, в том числе блоки, корректно вращаются и изменяют нормали. В третьих, действительно, многострочный текст имеет дополнительные настройки, в отличии от остальных объектов, для него всегда автоматом вычисляется вектор нормали и оценивается его направление. Отсюда и глюк! Попробуйте написать многострочник и отзеркалить его. Текст будет автоматически перевернут для правильного отображения... ps. Если необходимо это исправить, есть специальная переменная, на память не помню и акад не запущен - ищите сами, она с давних пор запротоколирована.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Елпанов Евгений
>>Хватит ругаться! Вы оба неправы... я не ругаюсь. и думаю никто не прав, включая Вас. >>Во первых, матрицу можно применить к любому объекту, через лисп. В этом всё удовольствие, не надо думать что модифицировать, умножил на матрицу и всё. линия, блок, мтекст. в случае линии - ее координаты умножатся на матрицу, в случае объекта с своей системой координат - его матрица умножится на нашу. все преобразования в одном - перемещения, масштаб и поворот >>Во вторых, все объекты автокада, в том числе блоки, корректно вращаются и изменяют нормали. смотря что подразумевать под корректным вращением: установите объекту нормаль 1,0,0 он повернется, но вдобавок либо повернется вокруг оси, либо изменится rotatin хотя мы его не меняли (rotate3d - меняется rotation, в лиспе не проверял) Вы кстати выше описывали пример вращения с использованием экранных координат - это корректно? Последний раз редактировалось zamtmn, 25.11.2009 в 20:34. |
|||
![]() |
|
||||
Цитата:
![]() я менял все через лисп, прямым редактированием dxf... При изменении вектора нормали, ничего подобного не происходит - меняется система координат объекта, точнее, только вектор нормали - направление по Z у объекта... Если перевести пользовательскую систему координат в полученную для объекта, то и направление угла поворота будет корректным.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>При изменении вектора нормали, ничего подобного не происходит - меняется система координат объекта.
Вращаю мтекст c нормалью 0,0,1 rotation 0 командой 3drotate вокруг оси Y на 90 градусов, в результате нормаль 1,0,0, rotation 270. объясните пожалуйста тоже самое на 1 градус, снова rotation 270. Последний раз редактировалось zamtmn, 25.11.2009 в 21:09. |
|||
![]() |
|
||||
я же писал о многострочнике...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
zamtmn, ты мне все время говоришь о команде 3drotate, а здесь раздел форума по программированию. Я все объяснения делал применительно к программному редактированию объектов, т.е. без использования командной строки и стандартных команд автокада. Я редактирую объекты автокада через объектные методы либо через описания dxf объекта и его словарей. Математику пересчитываю сам...
Исходя из этого, ответственно заявляю, я активно использую блоки в 3д, в том числе вращаю и преобразую углы и нормали. Еще ни одного раза не наталкивался на ошибки автокада.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Елпанов Евгений
Я понимаю почему так происходит. и максу пытась объясняю почему так - повернули на градус а rotation уже не тот, или тот а выглядит не так >>Математику пересчитываю сам... а никто за тебя ее не пересчитает)), но матрицами математика в разы проще и наглядней |
|||
![]() |
|
||||
Мне уже все равно... Когда много последовательных преобразований, я накапливаю их в матрице. Если же надо просто повернуть или сдвинуть - обхожусь без них...
Как пример, если нужно сделать отражение одной точки относительно произвольной плоскости - проще обойтись без матриц. Но когда необходимо вычислить серию отражений, те. положение нескольких точек после десятка отражений от произвольных плоскостей - здесь проще накапливать положение в одной матрице и потом применить матрицу к серии точек и вычислить новое положение. То же относится к объектам автокада... ps. кстати, матрица отражения в автокаде не запротоколирована...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
zamtmn, поворот вокруг произвольной оси, все равно будет описываться как перевод в систему координат, где ось поворота направлена в верх, потом поворот на нужный угол и перевод в исходную систему координат. Описать сразу поворот вокруг произвольной оси, не проходящей через центр координат в текущей системе, это слишком сложно и не универсально - проще делать в три действия, т.е. три матрицы и перемножить. Либо, как вариант, если это единичные вычисления для единственной точки, можно сделать такие же преобразования без матрицы, например через trans для поворота, смены системы координат и обычные смещения через mapcar...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
поворот вокуг произвольной оси: перенос оси в начало координат, поворот вокруг произвольной оси проходящей через 0 - перенос обратно. да 3 дейстрия. - одна матрица и один унифицированный метод для всех объектов, помоему очень удобно
формирование матрицы поворота вокруг произвольной оси проходящей через 0 - формирование 9ти ее элементов примерно по 3 умножения на каждый. но чаще повернуть нужно нацелив ось (не обязательно чтоб это была нормаль) на точку, тогда матрицу сформировать проще. нет такого математического апарата - задание ориентации осью и углом - это надстройка над матрицами Сразу не обратил внимание: >>Если перевести пользовательскую систему координат в полученную для объекта Эту матрицу перехода систем координат можно получить на лиспе?, если да - проблема Supermax решена Последний раз редактировалось zamtmn, 25.11.2009 в 23:57. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
В основе лежит вектор с началом в 000 МСК и некоторым направлением. С этим вектором однозначно связаны три угла: нутации, прецессии и чистого вращения. Подробности можно узрить в любом справочнике по математике ( у меня старенький для инженеров, авторы Бронштейн и Семендяев). Где то выше я приводил ссылку на готовую функцию вычисления этих углов. Один раз разобраться, и все проблемы с СКО отпадут навсегда.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Елпанов Евгений,
Цитата:
Вот тут, в библиотеке функций, лежат две функции _dwgru-conv-ent-to-ename и _dwgru-ent-modify-autoregen (первая нужна для работы второй). Не поленись, сделай милость, и все кто это читает, повторите то, что я сейчас напишу, и скажите что получилось. Плииз. Открываем чистый файл. Переходим в вид сверху (Top). По центру экрана ваяем любой текст (MTEXT). Набиваем в ком. строку или копируем через буфер прямо от сюда (entget (car (entsel))) должно вернуть что-то типа такого: Код:
точку вставки (10 1543.13 1270.98 0.0) нормаль (210 0.0 0.0 1.0) ось абсцисс (11 1.0 0.0 0.0) угол поворота вокруг нормали (50 . 0.0) Теперь, поворачиваем командой _Rotate наш текст вокруг его точки вставки на 20 градусов по часовой. смотрим что получилось Код:
нормаль (210 0.0 0.0 1.0) осталась прежней абсцисса (11 0.939693 0.34202 0.0) повернулась поворот (50 . 0.349066) в радианах Далее: переходим в вид спереди (Front) Командой _Rotate крутим наш текст (он еле заметная линия) по часовой на 20 градусов и возвращаемся в план (вид сверху). Смотрим что получилось Код:
Нормаль (210 -0.34202 0.0 0.939693) наклонилась влево Абсцисса (11 0.883022 0.34202 0.321394) тоже изменилась Угол поворота вокруг нормали (50 . 1.91986) а был (50 . 0.349066) ![]() Но это еще не все. Переписываем в блокнотик функции Kpblc-a _dwgru-conv-ent-to-ename и _dwgru-ent-modify-autoregen загружаем их и меняем угол поворота вокруг нормали на 0.0. (_dwgru-ent-modify-autoregen (car (entsel)) 50 0.0 T) Не знаю как у всех, но у меня в 2010 текст стал вертикально Код:
нормаль (210 -0.34202 0.0 0.939693) как была наклонена влево, так и осталась. Абсцисса (11 0.0 -1.0 0.0) ![]() угол поворота (50 . 0.0) Если вернуть нормаль на место (перейти в вид Front и повернуть текст на -20 градусов) то мы увидим (10 1543.13 1270.98 0.0) (210 -1.11022e-016 0.0 1.0) (11 0.0 -1.0 0.0) (50 . 4.71239) в нормали это - -1.11022e-016 почти 0, а угол стал правильным 4.71239 радиан, то есть 270 градусов. А теперь посмотрите что у вас. Последний раз редактировалось Supermax, 26.11.2009 в 16:51. |
||||
![]() |
|
||||
Что мне объяснили? Кто объяснил? Никто ничего толком сказать не может.
Вот вы мне скажите, что такое 50 пара? Вот прямо, что за угол такой, что при наклоне текста осью нормали влево на один градус резко начинает показывать 1.5708 радиан, что означает 90 градусов и так стоит пока нормаль не повернется на 180 градусов. Что вы все, мне матрицами мозг забиваете. Да какая в ж разница чем этот угол вычислять? почему, когда нормаль строго вертикально, этот угол четко вращает объект вокруг нормали, а стоит чуть-чуть нормаль наклонить, даже не во всех плоскостях, а только вокруг Y и этот угол-не угол показывает а черте-что. Я по малоопытности и недалекости считал, что это угол поворота вокруг нормали, но в Автокаде творится что-то совсем мне не понятное. Я хотел всего лишь по нормали и этому углу вычислить оси X и Y, тут все матрицы, матрицы! Ну и где ваши матрицы? Математики? Где продвинутые в мат отношении функции? Что слабо? Я тоже в аптеку за лекарствами могу посылать, и книжек у меня хоть библиотеку открывай, и Интернет весь до дыр в мозгу исходил. Хоть бы с углом этим ... разобраться помогли. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Supermax
>>Вот вы мне скажите, что такое 50 пара? Это еденичный вектор оси 0x объекта. >>Что вы все, мне матрицами мозг забиваете. Да какая в ж разница чем этот угол вычислять? есть разница, с матрицами его вообще вычислять ненадо >>Я хотел всего лишь по нормали и этому углу вычислить оси X и Y, тут все матрицы, матрицы! Ну и где ваши матрицы? Математики? Я выше приводил расчет осей из нормали и угла. математика что на лиспе что на паскале одинакова. >>Хоть бы с углом этим ... разобраться помогли. выше всё написано, почему угол скачит |
|||
![]() |
|
||||
Цитата:
Как вектор может быть определен одной цифрой? И в описании DXF кодов что написано? Цитата:
Цитата:
Я краем своих извилин что-то припоминаю, что на практике, чтобы избежать операций связанных то ли с умножением на 0, то ли с делением, в каждом случае положения нормали дают прибавку к углу поворота. Эта прибавка потом вычитается при необходимости. Я покрутил текст и вычислил. Если нормаль двигать строго по осям X или Y - нижняя дуга - 0, левая - 90 градусов, правая - 270 и верхняя 180. А вот в промежутках - пока не догнал принцип. Последний раз редактировалось Supermax, 26.11.2009 в 19:37. |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | 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 |