На главную Наши проекты:
Журнал   ·   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]  все  ( Перейти к последнему сообщению )  
> центр описанной окружности , подсобите.
    А всё, большое спасибо, ошибка найдена))) Как всегда наитупейшая)
      Цитата experimenter @
      да, блин, чего ты привязался со своей ортогонализацией? ты мне конечную формулу покажи

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

      А вот ортогонализацию здесь делать действительно не нужно, для перехода к старым координатам можно воспользоваться разложением по косому базису:

      Пусть есть система координат OXYZ и точки v1(v1x,v1y,v1y),v2(v2x,v2y,v2y),v3(v3x,v3y,v3y), надо найти точку c(cx,cy,cz), являющуюся центром описаной вокруг треугольника v1v2v3 окружности.

      Переходим в систему координат O'X'Y'Z', такую, что ось O'Z' перпендикулярна плоскости треуголька v1v2v3 и z'-координаты всех точек зануляются. Фактически, мы переходим в двухмерную систему координат O'X'Y'.

      Назначаем O' = v1, тогда новые координаты v1' зануляются:

      v1'x = 0.0
      v1'y = 0.0

      Далее, назначаем ось O'X' идущей по вектору v1v2, а ось O'Y' - лежащей в плоскости v1v2v3 перпендикулярно вектору v1v2 с той же стороны от v1v2, что и v3. Замечательно, что определять компоненты направляющего вектора оси O'Y', т.е. проводить ортогонализацию, при таком раскладе не нужно, т.к. координаты точек v2' и v3' определяются просто:

      v2'x = |v1v2| (считается по теореме Пифагора)
      v2'y = 0.0
      v3'x = <v1v3,v1v2>/|v1v2|
      v3'y = SQRT(|v1v3|^2-|v3'x|^2) (обратно теорема Пифагора два раза)

      Итак, переход в плоскость совершен, теперь решаем двухмерную задачу, причем можно воспользоваться тем, что сторона v1'v2' лежит на оси O'X' - тогда система решается очень просто, собственно надо будет решить и не систему, а одно линейное уравнение, получаем точку c'(c'x,c'y) - центр описанной вокруг v1'v2'v3' окружности.

      Раскладываем c' по косому ненормированому базису O'v2'v3':

      k12 = (c'x-c'y/(v3'x/v3'y))/v2'x
      k13 = c'y/v3'y

      И наконец, переходим к старым координатам:

      c = v1 + k12*v1v2 + k13*v1v3

      Вот так то! © Сибирские лесорубы :D
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:
      Страницы: (3) 1 2 [3]  все


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