|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Я думаю 1/64 много? Да я думаю это очень-очень мало! Раз так в 100000
т.е. надо (1\64)*100000=1562,5? или мало в смысле много)))? кароче, пример расчета ox в цифрах 1) отклонение меньше 1\64,например нормаль = (-9,9999999995e-06, 0, 0,99999999995) Код:
Код:
в каком месте 1\64 повлияла на точность? нормаль как была так и осталась, ниче не округрилось Последний раз редактировалось zamtmn, 05.12.2009 в 00:50. |
|||
|
||||
Самое пресамое что у нас есть по перемножению векторов это
Код:
Но мне настойчиво предлагают не перемножать вектора если их координаты X Y отличаются от 0 на < 0.015625. Если последовать этому совету, то у меня на расстоянии в 1 метр уже не совпадут полученные координаты на 15,625 мм с требуемым значением. Функция VVA C:TEST должна с моей точки зрения выглядеть так: Код:
Далее, я конечно понимаю, что истина дороже, и длинна полученного вектора, хоть и близка по размерам к точке, но она натуральна, но стоит этот вектор вытянуть до орбиты единичной окружности и что? X Y уже могут и не попасть под шаблон 1е-12. Я считаю, что надо забыть про формулировку "перемножение векторов" и принять формулировку "получение единичного вектора результата перемножения векторов". В эту функцию по перемножению надо вставить функцию VVA pl-geom-single-vector и только после нее сравнивать на 1е-12. Код:
Но это для Автокада! А для функции получения точки на прямой пересекающей плоскость, может надо оставить все как есть. zamtmn , надо 1/6400000 если не больше (в смысле меньше) Еще, вот есть у нас два вектора, их надо перемножить, от их длинны зависит результат перемножения? Я думаю да. А результат нам нужен для чего? Почему все время фигурирует понятие "вектор"? Если нам нужны длины отрезков, а не направления этих отрезков, так давайте так и говорить. А если нам нужны точные направления, так давайте умножим длины исходных векторов на миллион и потом посчитаем результат. Я бъюсь за точность направления, а за длинну имеет смысл биться только если она имеет значение при расчетах. Взял функцию VVA parallelp и проверил на паралельность два отрезка длинной в 100000 мм один из которых повернут на 1 мм на 100м и она ответила nil, что означает, что они не паралельны. Все, мозг мой усох совсем. Последний раз редактировалось Supermax, 04.12.2009 в 18:23. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Самое пресамое что у нас есть по перемножению векторов это
вполне нормальная функция. >>здесь установлена точность 1e-12, что хоть и не обосновано (ну, типа мне никто так и не обосновал) а что тут обосновывать? принята и всё, в жизни с такими величинами работать редко приходится >>Но мне настойчиво предлагают не перемножать вектора если их координаты X Y отличаются от 0 на < 0.015625. так принято в автокаде с незапамятных времен, хочешь сам считать СК объекта придется делать также. >>Еще, вот есть у нас два вектора, их надо перемножить, от их длинны зависит результат перемножения? конечно зависят, насколько помню длина результата - площадь паралепипида образованного исходными векторами. но это используется очень редко, заметь результат всегда нормализуется, в данном и большинстве случаев нам важно только направление вектора |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Когда считаешь ск - да, делаешь по ARBITRARY AXIS ALGORITHM.
В других случаях - нет, умножаешь если =ноль паралельны, нет - всё ок, получили нормаль. Когда считаешь плоскость по 3м точкам точки обычно заведомо берутся не на прямой. если уж получилось что точки на прямой - проверяй, не проверяй а однозначно плоскость через них никак не провести Когда считаешь ск объекты часто выровнены по осям, соответственно нужно проверять. есть 2 варианта расчета 1 - через YWCS, 2 - через ZWCS + четко установлена граница - 1\64, когда какой использовать. Последний раз редактировалось zamtmn, 05.12.2009 в 01:03. |
|||
|
||||
Вот так всегда. Ни да, ни нет. Для функции вычисления точки на прямой, пересекающей плоскость, надо векторы на паралельность проверять, или нет?
Сейчас попытаюсь ее доделать. Мы, товарищи, пойдем своим путем! Функция получения точки на отрезке (прямой), пересекающий плоскость. Код:
Принцип прост, до слез. Немного пришлось функцию VVA покрамсать. Добавил один аргумент, чтобы вычислять координаты от любой, произвольной точки. Код:
Последний раз редактировалось Supermax, 07.12.2009 в 14:32. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Вот так всегда. Ни да, ни нет. Для функции вычисления точки на
>>прямой, пересекающей плоскость, надо векторы на паралельность >>проверять, или нет? какие? ты читаешь че тебе пишут? >Мы, товарищи, пойдем своим путем! своих путей в этой области нет. всё давно придумано до нас сейчас ты плоскость задаешь нормалью и точкой. Т.е. ты автоматически считаешь что векторное произведение из задания плоскости тремя точками не равно 0. а проверить на перпендикулярность нормаль плоскости и направление прямой не помешает)) удобнее плоскость задавать нормалью и "высотой" т.е. стандартное уравнение Ax + By + Cz + D = 0. (A,B,C) - нормализованная нормаль плоскости. тогда процедура нахождения пересечения будет выглядеть примерно так: Код:
Последний раз редактировалось zamtmn, 07.12.2009 в 02:03. |
|||
|
||||
Я всегда задаю плоскость нормалью и точкой - для меня плоскость является еще и системой координат...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
zamtmn,
Цитата:
У нас есть исходные данные, а именно: Три точки, описывающие плоскость. (можно тупо заменить на нормаль и точку и оставить своим потомкам ломать голову как ее получить). Эти точки могут все три иметь одно и то же значение, что, надо проверять, или нет? Если пользователь три раза ткнул в одну и ту же точку, то что должна выдать функция? Я думаю ЕГОР. Так она и так его выдаст. Если две точки одинаковые, то значит, что пользователь или его тупой программный продукт два раза ткнул в одну и ту же точку. Что должна вернуть функция? - Конечно ЕГОР! Так она его и так выдаст в этом случае. Все три точки разные, а если нет - ЕГОР. Вот и все. А если точки разные - то мы можем смело перемножать АВ на ВС. Далее: Ваша функция хромает одним местом, а именно константой D. Ее надо вычислять, а если ее вычислять, то максимум на что мы можем расчитывать, так это на проекцию на плоскость, а не на пересечение. Вот в моей функции есть хомут, но его никто пока не заметил. Я его сейчас подправлю. Подправил. Функция, возвращающая угол между двумя векторами в градусах. (от точки 0,0,0) Код:
Последний раз редактировалось Supermax, 07.12.2009 в 18:15. |
||||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Елпанов Евгений
Тогда больше похоже на "я всегда задаю ск нормалью и точкой, она для меня еще и плоскость". почти во всех расчетах на плоскость D присутствует, ты так или иначе ее считаеш. если важна "точка начала коорбинат" то конечно, но в обычном понимании плоскости этой точки нет. Supermax >>векторы, которые мы собрались перемножать. Опять какие? нет, вернет 0 или NIL что тебе удобней, вот и проверка - нормали для этих векторов нет. >>Все три точки разные, а если нет - ЕГОР. Вот и все. все 3 точки не лежат на одной прямой, а если нет - ЕГОР. Вот и все. >>А если точки разные - то мы можем смело перемножать АВ на ВС. можем смело перемножать даже одинаковые |
|||
|
||||
zamtmn, все просто, у меня тоже, часто рождается эта плоскость из трех точек. Делаем из них два вектора и перемножаем их - получаем нормаль, потом берем любую из этих трех точек и называем ее базовой точкой - для случая нахождения пересечения линии и плоскости - достаточно...
ps. Появится немного свободного времени, оформлю для сайта несколько базовых функций для 3д преобразований, из своих частных запасов.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Когда-то по этому адресу была выложена библиотека функций на lisp. 3d_polarp - одна из них. Вот еще одна (не проверял)
Код:
Во вложении все, что я скачал в свое время.
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 08.12.2009 в 16:52. Причина: Обновил readme.txt во вложении |
||||
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
вот описание всего, что было выложено по вышеуказанному адресу
Цитата:
|
|||
|
||||
Вот это, да!
Надо уже в библиотеку функций это все перенести. Ну почему так всегда, бъешся, бъешся, никто ничем помочь не может (или не хочет), а стоит наконец-то сделать и выложить, так сразу оказывается, что у всех все есть. Ну где вы раньше были? |
||||
|
||||
Supermax, Во многих темах, тебе пытались объяснить, что библиотечные функции должны быть универсальными, а не такими, как тебе нужно в данный конкретный момент. И еще, универсальность, это не значит, что делает все кроме кофе. Универсальность, это когда выполняет одну операцию, но качественно.
ps. только без обид - я не хочу обидеть!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | 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 |