центр описанной окружности
, подсобите.
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.157] |
|
|
правила раздела Алгоритмы

| Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
центр описанной окружности
, подсобите.
|
Сообщ.
#16
,
|
|
|
|
да, ребят, я с вами согласен, что если бы все происходило в реальном времени, то это было бы аргументом, но я уже засандалил формулы и они работают правильно.
Lucifer, так я же не буду набивать, я просто скопирую и вставлю. тем более, мне надо считать центр всего один раз - при инициализации, а там нет требований к времени, а уже при движении треугольника, двигать его и его точку, что не занимает так уж много вычислений, а решать систему тоже может быть проблематично, так как вы знаете, что итерационный процесс не всегда сходится и где гарантия, что задав опредленное начальное приблежение, например, вершину трегольника, процесс сойдется? зы все сходится к тому, что у меня есть фигура, состоящая из треугольников, так я хочу стокновения фигур просчитывать более точно, чем просто помещая фигуру в шар, т.е. если фигуры сталкиваются по шарам, то проверяем столкновения каждой грани одной фигры с каждой гранью другой, используя помешение каждого треуголника в маленький шар, для чего и нужен центр описанной окружности и . может, конечно, это не самый оптимизированный вариант, но мне кажется довольно неплохой, а вам? |
|
Сообщ.
#17
,
|
|||
|
|
вон оно оказывается для чего!! вобще тогда уж можно помещать треугольник в маленький паралепипед |
|
Сообщ.
#18
,
|
|
|
|
а чем параллелипипед для сравнения лучше?
|
|
Сообщ.
#19
,
|
|
|
|
Эй, что за ответ дикий??? Это после всех упрощений???
Если будешь такую задачу решать на бумажке, ответ-то получишь в сто раз быстрее чем по этим формулам. Гм, если возьмешь середины отрезков треугольника (достаточно двух), векторы из них таким образом, что скалярные произведения(с.п.) этих векторов и соотв. сторон треугольника =0 и с.п. этих векторов и нормали к плоскости треугольника =0. Потом берешь пересечение этих векторов? |
|
Сообщ.
#20
,
|
|||||
|
|
1. не надо искать центр 2. чтобы узнать пересечение пп надо только сравнить координаты, а не брать корни и возводить в квадрат 3. если ты не понял я говорю о пп таком:
тоесь просто кусок пространства содержащий треугольник.
и вобще, мне тут тоже понадобилось столкновения определять. так что я ещё не прощаюсь |
|
Сообщ.
#21
,
|
|
|
|
кстати откопал щас в форуме то, что изначально спрашивалось.
http://forum.sources.ru/index.php?showtopic=9503 там оно изначально трёхмерное и занимает в ~30..100 раз меньше кода ето я фак по алгоритмам решил дописать, наверное ща ето дело тоже упомяну Добавлено в зы. извиняюсь, всётаки двумерное. но в данном случае ортогонализация рулит |
|
Сообщ.
#22
,
|
|||
|
|
надо сначала решить задачу твоим способом, а потом уже надо посмортеть насколько там короче ответы. я чего сомневаюсь, что там прямо напорядок меньше. р*бят, вот готовые формулы, я по ним могу посчитать, а по просто предложениям еще не могу. |
|
Сообщ.
#23
,
|
|
|
|
тебе же русским языком сказали
http://forum.sources.ru/index.php?showtopic=9503 там формула проще не бывает |
|
Сообщ.
#24
,
|
|
|
|
да, блин, чего ты привязался со своей ортогонализацией? ты мне конечную формулу покажи, а не эту двумерную, а двумерная у меня на предыдущей странице и ни чуть не сложнее. её еще в трехмреную надо переводить.
|
|
Сообщ.
#25
,
|
|||
|
|
с векторами общаться умеешь? чо тебе тогда мешает ортогонализацию произвести?
и получаем ортонормированный базис. далее по тексту
|
|
Сообщ.
#26
,
|
|
|
|
Nedavno zanimalsya razrabotkoy geom paketa, tak chto u menya yesli resheniye dlya nahojdeniya koordinati tsentra opisannoy okrujnosti dlya treugolnika A1A2A3, gde A1(x1, y1), A2(x2, y2) i A3(x2, y2).
![]() ![]() type TPoint2D = record x, y: Single; end; procedure CenterOfCircumcircle(const v1, v2, v3: TPoint2D; var c: TPoint2D); var a1, b1, c1, a2, b2, c2, d: Single; begin a1 := v1.x-v2.x; b1 := v1.y-v2.y; c1 := Sqr(v2.x)-Sqr(v1.x)+Sqr(v2.y)-Sqr(v1.y); a2 := v2.x-v3.x; b2 := v2.y-v3.y; c2 := Sqr(v3.x)-Sqr(v2.x)+Sqr(v3.y)-Sqr(v2.Fy); d := 2*(a1*b2-a2*b1); c.x := (b1*c2-b2*c1)/d; c.y := (c1*a2-c2*a1)/d; end; P.S. Lutsche pozdno chem nekogda. |
|
Сообщ.
#27
,
|
|
|
|
Народ. Возникал такая проблема, подскажите пожалуйста. Мне тоже требуется для Курсового найти центр описанной около треугольника окружности для двумерного случая. Я воспользовался приведёнными ранее формулами, но иногда возникает ошибка деления на ноль. Как бы от неё избавиться?
Заранее благодарен, Александр. |
|
Сообщ.
#28
,
|
|
|
|
Цитата NightHost @ Мне тоже требуется для Курсового найти центр описанной около треугольника окружности для двумерного случая. Оззе в свое время хватило вот этого: http://forum.sources.ru/index.php?showtopi...dpost&p=1407276 Добавлено В трехмерном случае все тоже самое: Пусть заданы три точки M1(x1,y1,z1), M2(x2,y2,z2), M3(x3,y3,z3), требуется найти точку C(xc,yc,zc), являющуюся центром описаной вокруг треугольника M1M2M3 окружности. Для простоты будем искать точку T(xt,yt,zt), такую, что C=(M1+T)/2. Уравнение плоскости, проходящей через точку M2 и перпендикулярной вектору M1M2 выглядит так: (1) < (x-x2,y-y2,z-z2), M1M2 > = 0 Уравнение плоскости, проходящей через точку M3 и перпендикулярной вектору M1M3 выглядит так: (2) < (x-x3,y-y3,z-z3), M1M3 > = 0 Пересечением этих плоскостей (в случае невырожденного треугольника) будет прямая, для выделения точки T добавим условие того, что она лежит в плоскости M1M2M3: (3) < (x-x1,y-y2,z-z3), n > = 0 , где n - нормаль к плоскости M1M2M3 (находится через векторное произведение M1M2 и M1M3). Итак, имеем систему трех линейных уравнений с тремя неизвестными, которую решаем одним из известных способов (скажем, методом Крамера). |
|
Сообщ.
#29
,
|
|
|
|
Так в том то и проблема - я сейчас сделал как по твоей ссылке, но результата нуль. Всё равно находятся такие точки при которых происходит деление на ноль. =(
|
|
Сообщ.
#30
,
|
|
|
|
Цитата NightHost @ Так в том то и проблема - я сейчас сделал как по твоей ссылке, но результата нуль. Всё равно находятся такие точки при которых происходит деление на ноль. =( Если точки лежат на одной прямой, т.е. задают вырожденный треугольник, то так и должно быть, и у меня об этом написано. Если деление на ноль возникает в других случаях, то значит у тебя реализовано что-то не так. Кстати, код из сообщ. #26 - рабочий для невырожденных треугольников с точностью до одной описки, на которую тебе укажет компилятор. |