На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> центр описанной окружности , подсобите.
    да, ребят, я с вами согласен, что если бы все происходило в реальном времени, то это было бы аргументом, но я уже засандалил формулы и они работают правильно.
    Lucifer,
    так я же не буду набивать, я просто скопирую и вставлю.

    тем более, мне надо считать центр всего один раз - при инициализации, а там нет требований к времени, а уже при движении треугольника, двигать его и его точку, что не занимает так уж много вычислений, а решать систему тоже может быть проблематично, так как вы знаете, что итерационный процесс не всегда сходится и где гарантия, что задав опредленное начальное приблежение, например, вершину трегольника, процесс сойдется?
    зы
    все сходится к тому, что у меня есть фигура, состоящая из треугольников, так я хочу стокновения фигур просчитывать более точно, чем просто помещая фигуру в шар, т.е. если фигуры сталкиваются по шарам, то проверяем столкновения каждой грани одной фигры с каждой гранью другой, используя помешение каждого треуголника в маленький шар, для чего и нужен центр описанной окружности и . может, конечно, это не самый оптимизированный вариант, но мне кажется довольно неплохой, а вам?
      Цитата
      experimenter, 25.12.03, 15:58
      все сходится к тому, что у меня есть фигура, состоящая из треугольников, так я хочу стокновения фигур просчитывать более точно, чем просто помещая фигуру в шар, т.е. если фигуры сталкиваются по шарам, то проверяем столкновения каждой грани одной фигры с каждой гранью другой, используя помешение каждого треуголника в маленький шар, для чего и нужен центр описанной окружности и . может, конечно, это не самый оптимизированный вариант, но мне кажется довольно неплохой, а вам?

      вон оно оказывается для чего!! вобще тогда уж можно помещать треугольник в маленький паралепипед smile.gif и никаких центров не надо будет. а потом потипу если паралепипеды пересекаются, то уже проверять собственно треугольники.
        а чем параллелипипед для сравнения лучше?
          Эй, что за ответ дикий??? Это после всех упрощений???

          Если будешь такую задачу решать на бумажке, ответ-то получишь в сто раз быстрее чем по этим формулам.
          Гм, если возьмешь середины отрезков треугольника (достаточно двух), векторы из них таким образом, что скалярные произведения(с.п.) этих векторов и соотв. сторон треугольника =0 и с.п. этих векторов и нормали к плоскости треугольника =0. Потом берешь пересечение этих векторов?
            Цитата
            experimenter, 25.12.03, 17:39
            а чем параллелипипед для сравнения лучше?

            1. не надо искать центр
            2. чтобы узнать пересечение пп надо только сравнить координаты, а не брать корни и возводить в квадрат
            3. если ты не понял я говорю о пп таком:
            xp1<=xa,xb,xc<=xp2
            yp1<=ya,yb,yc<=yp2
            zp1<=za,zb,zc<=zp2
            тоесь просто кусок пространства содержащий треугольник.

            и вобще, мне тут тоже понадобилось столкновения определять. так что я ещё не прощаюсь
              кстати откопал щас в форуме то, что изначально спрашивалось.
              http://forum.sources.ru/index.php?showtopic=9503
              там оно изначально трёхмерное и занимает в ~30..100 раз меньше кода smile.gif smile.gif smile.gif smile.gif
              ето я фак по алгоритмам решил дописать, наверное ща ето дело тоже упомяну smile.gif

              Добавлено в
              зы. извиняюсь, всётаки двумерное. но в данном случае ортогонализация рулит
                Цитата (xJohnny @ 25.12.03, 14:55)
                Эй, что за ответ дикий??? Это после всех упрощений???

                Если будешь такую задачу решать на бумажке, ответ-то получишь в сто раз быстрее чем по этим формулам.
                Гм, если возьмешь середины отрезков треугольника (достаточно двух), векторы из них таким образом, что скалярные произведения(с.п.) этих векторов и соотв. сторон треугольника =0 и с.п. этих векторов и нормали к плоскости треугольника =0. Потом берешь пересечение этих векторов?

                надо сначала решить задачу твоим способом, а потом уже надо посмортеть насколько там короче ответы. я чего сомневаюсь, что там прямо напорядок меньше. р*бят, вот готовые формулы, я по ним могу посчитать, а по просто предложениям еще не могу.
                  тебе же русским языком сказали
                  http://forum.sources.ru/index.php?showtopic=9503
                  там формула проще не бывает
                    да, блин, чего ты привязался со своей ортогонализацией? ты мне конечную формулу покажи, а не эту двумерную, а двумерная у меня на предыдущей странице и ни чуть не сложнее. её еще в трехмреную надо переводить.
                      с векторами общаться умеешь? чо тебе тогда мешает ортогонализацию произвести?

                      __ __  __
                      е1=АВ/|АВ|
                      __  __ __   __ __  __ __
                      е2=(АС,АВ)/(АВ,АВ)*АВ+АС
                      __ __  __
                      е2=е2/|е2|
                      и получаем ортонормированный базис. далее по тексту
                        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).

                        ExpandedWrap disabled
                          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. :)
                          Народ. Возникал такая проблема, подскажите пожалуйста. Мне тоже требуется для Курсового найти центр описанной около треугольника окружности для двумерного случая. Я воспользовался приведёнными ранее формулами, но иногда возникает ошибка деления на ноль. Как бы от неё избавиться?
                          Заранее благодарен, Александр.
                            Цитата 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).

                            Итак, имеем систему трех линейных уравнений с тремя неизвестными, которую решаем одним из известных способов (скажем, методом Крамера).
                              Так в том то и проблема - я сейчас сделал как по твоей ссылке, но результата нуль. Всё равно находятся такие точки при которых происходит деление на ноль. =(
                                Цитата NightHost @
                                Так в том то и проблема - я сейчас сделал как по твоей ссылке, но результата нуль. Всё равно находятся такие точки при которых происходит деление на ноль. =(

                                Если точки лежат на одной прямой, т.е. задают вырожденный треугольник, то так и должно быть, и у меня об этом написано. Если деление на ноль возникает в других случаях, то значит у тебя реализовано что-то не так.

                                Кстати, код из сообщ. #26 - рабочий для невырожденных треугольников с точностью до одной описки, на которую тебе укажет компилятор.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.0939 ]   [ 15 queries used ]   [ Generated: 25.10.26, 05:56 GMT ]