|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Supermax,
1. без матриц нельзя описать поворот в 3д. 2. а если все это проделать не с многострочным текстом, а с другим примитивом, например блоком? Цитата:
По поводу многострочного текста, я уже говорил, сначала сделай, чтоб при зеркалировании, текст отображался зеркально, а потом рассказывай про эксперименты с текстом - автокад пытается правильно отобразить текст...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 26.11.2009 в 19:33. |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
DXF пара 50 - это угол чистого вращения (тот самый "от Эйлера").
Система координат объекта (СКО, она же OCS) представляет собой следующее: 1. Начало совпадает с 000 МСК. 2. Направление Z совпадает с вектором нормали из 210 пары. 3. Ось X всегда лежит в плоскости XY МСК, а её направление вычисляется, как векторное произведение оси Z МСК и вектора нормали объекта. Т.е мысленно вращаем кратчайшим образом Z МСК до совпадения с вектором нормали и по правилу правого винта получаем направление X СКО. 4. Ось Y CКО однозначно определяется через Z и X так, чтобы образовалась правая тройка векторов. Вот и вся математика. Теперь пример. Возьмем текст, лежащий в плоскости XY МСК с нулевым углом поворота (чистого вращения). Если его "взять" за конец нормали и слегка "наклонить влево" то оси СКО изменят свое направление. Ось Z - это нормаль, которую мы "слегка наклонили влево". Ось X вычисляется как векторное произведение (Z МСК * нормаль) и смотрит в данном случае строго вниз ( -Y МСК). В этой новой системе координат объекта текст оказывается повернут относительно оси X СКО на 90 градусов. Поэтому и в паре 50 оказывается новое значение согласованное с новой СКО.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>3. Ось X всегда лежит в плоскости XY МСК, а её направление вычисляется, как векторное произведение оси Z МСК и вектора нормали объекта
не совсем так, используется arbitrary axis algorithm. углы Эйлера удобны когда надо делать интерполяцию вращения. всерано когда надо конкретно считать - их прибется переводить в матричную форму Последний раз редактировалось zamtmn, 26.11.2009 в 19:54. |
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Цитата:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
Pastor, О! Это уже конкретный базар пошел! Жму пять!
Буду завтра разбираться и тщательно вникать. zamtmn, с твоими мат. примерами тоже. Тебе тоже спасибо за помощь. Елпанов Евгений, Цитата:
Всегда, поворачивая объект вокруг нормали, надо считывать существующий угол и прибавлять к нему нужное значение поворота, а не заменять тупо одно на другое. Ладно, на сабантуй прийду с ноутбуком. Там и пообщаемся. 19-00 буду. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>В этом особом случае СКО принимается совпадающим с МСК и считать
>>ничего не требуется. Так же особым является случай, когда нормаль >>противонаправлена оси Z МСК. Тогда ось X СКО надо принять (-1, 0, 0) . А если нормаль чуть чуть отличается от 0,0,1 ну совсем чуток чуть больще чем погрешность. Получится что Вы перемножите почти паралельные вектора и результат будет неверным. поэтому делается так: Цитата:
|
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитату не понял. Равно как и не понял проблему.
Вот функция, вычисляющая векторное произведение. Если результат слишком близок к (0 0 0), то функция принимает решение, что вектора коллинеарны и возвращает nil. Код:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Цитату не понял. Равно как и не понял проблему.
Вы говорите что: Цитата:
"близкой" = X и Y нормали < 1/64. конечно в жизни такие нормали бывают не часто, но бывают |
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Признаю свою ошибку.
AutoCAD вводит четко определенные правила при вычислении СКО для векторов нормали близких к оси Z МСК. Как указывал выше zamtmn, всё описано в acad_dxf.chm. Кстати, число 1/64 не такое уж и маленькое. В пересчете на градусы отклонения от Z МСК это между 0.8 и 0.9. >>zamtmn Спасибо за вашу настойчивость. Лоб то у меня медный
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
Вставлю свои пять копеек.
Замечу, что функция перемножения векторов никогда, подчеркивю НИКОГДА не должна возвращать nil! Если вектора практически слились в одну линию, то надо чтобы функция все равно возвращала какой-то вектор. В частности, если мы перемножаем нормаль на вектор Z МСК, то функция вырождается в: Код:
Результирующий вектор должен быть перпендикулярен нормали. То есть он лежит в плоскости XY МСК, но перпендикулярен и оси Z МСК и нормали одновременно. Тогда мне понятно как отложить угол от этого вектора к оси X СКО. Y равна перевернутому X нормали, а X - Y нормали. Получается 90 градусов. Вот так - правильно! Смущает одно, надо продлевать значения X и Y результирующего вектора до точки на единичной окружности. Чтобы функция не бесконечно малые числа возвращала, а путевый единичный вектор. Последний раз редактировалось Supermax, 29.11.2009 в 22:30. |
||||
|
||||
Supermax, Действительно, невнимательно смотрел код...
В данном случае, я хотел сказать - если необходимо всегда давать вектор - значит надо давать, но это не значит, что при ошибке всегда давать какой то заранее заданный. Такой подход, в будущем приведет к очень сложно находимым ошибкам...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Остается вместо nil вставить вектор. (1.0 0.0 0.0)?
вообщето для паралельных векторов результат долженбыть (0.0 0.0 0.0) по определению векторного произведения. разруливать паралельность нужно вызывающей программой, а не программой умножения. |
|||
|
||||
Я считаю, что надо сначала сравнивать векторы на паралельность, а потом решать что с этим делать. И как узнать при каких обстаятельствах и как определить паралельны они или нет?
Функция не доработана. А надо. Очень надо вычислять точку пересечения прямой и плоскости. Плоскость по трем точкам, а прямая по двум. Последний раз редактировалось Supermax, 03.12.2009 в 14:48. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
универсальный способ проверить на паралльность - посчитать векторное произведение
>>Очень надо вычислять точку пересечения прямой и плоскости. Плоскость по трем точкам, а прямая по двум. вся необходимая математика: http://algolist.ru/maths/geom/index.php перекатать это на лиспе думаю труда не составть Последний раз редактировалось zamtmn, 03.12.2009 в 15:40. |
|||
|
||||
Чтобы туда-сюда не лазить сюда перенес суть.
Цитата:
Код:
Ладно, переделываем функцию перемножения на классику. Код:
Код:
Последний раз редактировалось Supermax, 03.12.2009 в 17:57. |
||||
|
||||
проверить параллельность двух плоскостей можно проще, по векторам:
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>дальше застрял. Угол между векторами надо найти.
дальше не нужно угол искать. нужно поюзать гугл и посмотреть определение скалярного произведения. можно вот так посчитать: Цитата:
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | 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 |