|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
О! Штангенциркуль в ход пошел! (...inters...) Зачем в самом деле париться, если Автокад может пособить.
Но я вот по поводу угла между векторами хочу спросить, я правильно функцию наваял? Код:
http://www.bymath.net/studyguide/alg/sec/alg25.html Гугл уже поюзал и именно скалярное произведение требует косинуса угла между векторами. Немного недоглядел. Исправил. Хорошо, что атомную станцию не считаю. Последний раз редактировалось Supermax, 03.12.2009 в 17:49. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Гугл уже поюзал и именно скалярное произведение требует косинуса угла между векторами.
нет, если в руках транспортер а на ватмане 2 вектора - считают через косинус. если извесны координаты, то x1*x2 + y1*y2+z1*z2, а заодно потом через него (скалярное произведение) и угол между векторами найти можно |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
VVA, про паралельность я спрашиваю с точки зрения требуемой точности для автокада. Вот какие две, якобы паралельные линии считаются таковыми в Автокаде? Скажем на расстоянии в километр какая дельта х y z может быть?
Вот при каких значениях нормали Автокад автоматически разворачивает ось ПСК объекта в 1,0,0? Я считаю, что именно такое значение расхождения в паралельности и нужно закладывать в функцию как "крайний рубеж". Ну что такое -12 степень? А может -16 сглотнет? Нет точных данных. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>с точки зрения требуемой точности для автокада
В автокаде точность настраивается, такчто или получить ее значение, или забить и использовать свою точность цитата из "дубового" перевода документации по arx: Цитата:
|
|||
|
||||
Я это понимаю, но ответ на мой вопрос
Цитата:
Вы понимаете, что надо насильно в функцию перемножения векторов вставлять это дело? Потом, результат перемножения укорачивает результирующий вектор и дальнейшее использование этих данных вынуждает работать с очень маленькими значениями, что ухудшает погрешность дальнейших вычислений. В функцию надо вставить вычисление точки отложенной от 0,0,0 в строну результирующего вектора длинною 1мм. Это и будет возвращаемое значение функции. И это функция уже не перемножения векторов, а определение вектора оси Х ПСК (промежуточной системы координат). Люди, VVA, ну граблями я функции пишу. Что вам стоит пару строчек черкнуть? И функцию пересечения плоскости прямой тоже надо дописать, ведь все уже есть! Я чего бъюсь? - мне надо подрезать слейсом 3Dсолид и восстанавливать, а точнее переписывать историю. Чтобы всегда можно было узнать длинну объекта, не зависимо от того, сколько дырок вы в нем насверлили или как подрезали. Изначально считаем, что все 3D солиды имеют свои истории. Читам историю, смотрим осевую 3Dсолида, вычисляем точку пересечения с плоскостью реза, замеряем длинну, которая остается и после реза записываем новые данные точки вставки, длинны осевой и координат. Хочу чтобы слейс и мувфасес не убивали историю. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Вы понимаете, что надо насильно в функцию перемножения векторов вставлять это дело?
зачем? надо заранее смотреть и не перемножать паралельных векторов используя Цитата:
Последний раз редактировалось zamtmn, 04.12.2009 в 12:14. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
То же что сказал и zamtmn (если я правильно понял)
1. Вычисляешь единичный вектор 2. Сравниваешь точность по X,Y,Z Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Кто-то из нас видимо что-то не понимает.
zamtmn, я с тобою полностью согласен, что надо проверять на паралельность ДО того. Но как проверять. Функции VVA на паралельность может и подойдут, если они действуют в соответствии с Цитата:
И в Автокаде надо 1,0,0 вместо нее ставить! Результат перемножения векторов должен быть вектор! Кто-нибудь напишет НОРМАЛЬНУЮ функцию перемножения векторов? Чтобы и проверка на паралельность, точность и единичный вектор возвращала? Сколько можно одно и то же мусолить? Давайте делать! |
||||
|
||||
Цитата:
Для параллельных векторов, при перемножении нельзя выдавать что нибудь. Это как сделать свою функцию деления, в которой при делении на ноль, всегда возвращалось бы какое либо заранее заданное число...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Елпанов Евгений, ну вроде тоже верные мысли, но как быть?
Придется закинуть эту математику к .. фене и сделать самим Автокадом методом штангенциркуля. Так я это уже и сделал! См. http://forum.dwg.ru/showpost.php?p=480556&postcount=24 Вот как сам автокад этот ежик повернул - так тому и быть! Какая там точность?, Какая паралельность? - Все в тумане, но выше этого уже никакой математикой не прыгнешь! |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Кто-нибудь напишет НОРМАЛЬНУЮ функцию перемножения векторов?
>>Чтобы и проверка на паралельность, точность и единичный вектор >>возвращала? Сколько можно одно и то же мусолить? Давайте делать! Ну ты упертый чувак)) в функции перемножеения должно быть только перемножение. Ничего другого пихать туда нельзя - это будет уже другяю программа реализующая какойто свой алгоритм на основе умножения. предположим ты считаешшь ск объекта: используй arbatrary axis - результат будет коректен, всё развернется как надо его смысл какраз в том чтобы не перемножить паралельные вектора. или ты считаешь нормаль плоскости заданной тремя точками: если векторное произведение вернуло (0,0,0) значит точки на одной прямой и плоскостей описываемых ими много. выбрать какуюто одну плоскость - это уже твое дело, а не процедуры умножения. Елпанов Евгений дело говорит, подправлять под свои хотелки математическую функцию и называть это "НОРМАЛЬНУЮ функцию перемножения векторов" - вредительство))) (0,0,0) почему не вектор? нормальный вектор нулевой длины. |
|||
|
||||
Да бог с ним, не надо мне уже ничего перемножать.
Я только наведу маленько тень на плетень и пойду. 1/64=0.015625 это дельта 15,625 миллиметров на метр. С такой точностью можно и локтями измерить. Автокад устанавливает точность на много-много порядков больше. Так что 1/64 - мягко говоря туфта. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
1/64 - это не точность
это граница на которую может отклониться нормаль от 0,0,1 если отклонено больше - считаем 0x = Wz X N (т.е. нормаль не близка (не паралельна) к 0,0,1) если меньше - 0x = Wy X N (т.е. нормаль близка (паралельна) к 0,0,1) Это не предел для прощедуры векторного умножения, а условная граница переход через которую сдваигает 0x объекта. Наверно когдато давно, когда компы были большими а точность вычислений маленькой - 1\64 было близко к пределу влияющему на точность, сейчас нет. Просто так повелось Последний раз редактировалось zamtmn, 04.12.2009 в 14:44. |
|||
|
||||
Supermax, Все, замяли с умножением векторов!
Вспоминаю код, явно писали инудсы... Видимо у них постоянно вылетала ошибка деления на ноль, так они в куче мест программы, все нули меняют на 1е-8. Стоит один раз запустить такую программу в чертеже и работать с ним становится невозможно - заменяются нули в 10 и 210 кодах dxf. ой, забыл самое главное - еще все углы во всех примитивах (дуги, тексты итд...)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 04.12.2009 в 15:17. |
||||
|
||||
Александр Ривилис, наводить тень на плетень тоже нужно, иначе в мозгах застой образуется. Точнее в ваших мозгах, а в моем он не образуется, он там постоянно прописан.
zamtmn, не знаю как там повелось, но 1/64 и 1е-12 вещи настолько разные, что как-то не верится, что спецы AutoDesk при < 1/64 считают вектора паралельными. А я еще и 1е-16 и 1е-18 видел. Елпанов Евгений, а вот тут я не догнал чуток. "округляются нули" ты говоришь, что они 0 заменили на 1е-8, какое это округление? Цитата:
Завязать с перемножением не получится. Я забыл, что есть благородная задача написать функцию получения координат точки на линии, пересекающей плоскость. А там перемножение - основа. |
||||
|
||||
Supermax, извини, описался...
Имел в виду, что в начале работы программы, сканируется весь чертеж и в кодах 10 11 210 50 и возможно еще каких то, все нули меняются на 1е-8
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Ну тогда я понимаю, 1е-8 это уже не 1/64, но тем не менее тоже не сахар.
И вообще, разозлися не на шутку. Провел линию в 100 метров! и повернул ее на 0.00015 радиан, а вектор отклонил (210 -0.00015 0.0 1.0)) по Х на 15 миллиметров на 100 метрах! Ну и где ваши 1/64? Вы посмотрите, в 210 паре даже е-хх не появилось, а оно там бывает, будьте уверены! Вот, подправил 1 миллиметр на 100 метрах (210 -1.0e-005 0.0 1.0) и тоже все в шоколаде. Последний раз редактировалось Supermax, 04.12.2009 в 15:29. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
1\64 ни как на ТОЧНОСТЬ вычислений не влият. прими они 1\32 все было бы также, угол бы скакал чуток позже, но всё по прежнему вращалось бы также корректно.
>>что спецы AutoDesk при < 1/64 считают вектора паралельными это сделано чтоб не множить паралельные вектора, но это не значит что считают что они паралельны. на месте 1\64 должна быть какаято цифра почему ты думаешь что 1\64 много? |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | 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 |