![]() |
Новый 3d редактор RiFLe - вопрос к математикам
Вложений: 2
Здраствуйте уважаемые форумчане. Запиливаю небольшой 3d редактор RiFLe(во вложении версия на текущий момент, скриншот) для удобства создания low-poly моделей типа рельефных надписей, стен с оконными и дверными проёмами, хотя можно сделать модель и посложнее.
Сделал автоматическое рисование треугольников(триангуляция Делоне), но вот никак не могу найти решение для простой на первый взгляд задачи - найти центр описанной около треугольника окружности в координатной форме. СУТЬ ПРОБЛЕМЫ В триангуляции использован исходник для нахождения координат центра описанной окружности, который, как оказалось, с ошибкой. Из-за этого треугольники не рисуются в случае, подобном примеру Example_with_Error. Есть статья на википедии http://ru.wikipedia.org/wiki/Описанная_окружность но там в векторной форме и непонятно как использовать эти два числа в скобке через запятую (перемножить или что?) ![]() Буду очень рад, если кот-нибудь подскажет как эти уравнения расписать подробно в координатной форме( чтоб запрогать их) Вот старый исходник, который счас в редакторе. Код:
Function InCircle(xp#, yp#, x1#, y1#, x2#, y2#, x3#, y3#, xc#, yc#, r#) |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Смешно выкладывать прототип редактора Модех, выдавая его за свой!, хоть бы название сменил!
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Да, я думаю это было сказочной глупостью выкладывать то, хозяин чего постоянно кантуется на форуме...
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Где там Модэкс? Возможно мы его потом в Модэкс и встроим, но счас он отдельно
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
жди, я потираю руки в предвкушении срача
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Ещё раз разуйте глаза и взгляните на скриншот - это не модекс. Это мой редактор, который я писал для L.D.M.T и продолжил счас развивать
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
а тогда другое дело,
так сразу бы и отписался, |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
нигде нет нормально пашуших исходников, или формул, хотя казалось бы...
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Цитата:
Код:
Edge1.X = B.X - A.X Center - искомый центр окружности |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
L.D.M.T. залогинься
|
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Разобрался с проблемой:
Дело было в граничных условиях - если прямо на границу описанной окружности ложились еще точки, то функция выдавала true. Чтоб обойти это, в таком случае сортируем точки по величине угла к центру окружности (помог Atan2), чтоб узнать, в каком случае включать их, а в каком нет. Заодно это приводит к некоторому порядку в прорисовке треугольников Код:
Function InCircle4(xp#, yp#, x1#, y1#, x2#, y2#, x3#, y3#, xc#, yc#, r#) |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
A_Z
немного побрюзжу по поводу кода :) - не забывай о погрешности float и сравнивай float переменные в виде разницы между ними: Код:
If Abs( переменная1 - переменная2 ) < EPSILON - сократи квадратные корни в вычислении радиуса и дистанции, для сравнения подобных величин можно обойтись без корня. - не используй для возведения в квадрат оператор ^, т.к. в блице это вызов функции, намного дороже чем просто перемножить Код:
... - не обязательно везде указывать тип переменной ( я про значок # ), достаточно при обьявлении или первом использовании. - не забывай обьявлять локальные переменные в функциях как Local, иначе может быть конфликт с глобальными переменными Код:
If (angle#>=90 And angle#<180) Or (angle#=>-90 And angle#<0) Код:
Return ( angle >= 90 And angle < 180 ) Or ( angle => -90 And angle < 0 ) |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Cпасибо Platon, это все учту:)
конкректно по вопросу почему ... If rasst#=radius# ... - это как раз и есть граничное условие в триангуляции Делоне, что больше чем 3 точки оказывается на описанной окружности (скажем надо протриангулировать прямоугольник - там два треугольника, но если описывать окружность вокруг них, то четвёртая точка прямоугольника будет лежать на её границе) - поэтому конкретно для этого случая и приходится делать так. |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
A_Z
Это условие лишнее, т.к. у тебя выше него есть два условия - расстояние меньше радиуса и расстояние больше радиуса, если оба условия не сработают, то значит расстояние равно радиусу и смысла еще раз это проверять нет :) |
Ответ: Новый 3d редактор RiFLe - вопрос к математикам
Platon. ещё раз
если прямо на ГРАНИЦУ описанной окружности ложились еще точки, то функция выдавала true. Чтоб обойти это, в таком случае сортируем точки по величине угла к центру окружности (помог Atan2), чтоб узнать, в каком случае включать их, а в каком нет. Заодно это приводит к некоторому порядку в прорисовке треугольников |
Часовой пояс GMT +4, время: 09:49. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot