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

    все, теперь я точно понял
    чего-то я тупо ступил, посчитав, что, когда линия || Ox, то координата по Х НЕ меняется, ужс...( она не меняется для || Oy )
      Парни, а как же формула Гаусса?
      ExpandedWrap disabled
            public static double Shoelace(IList<Point> points)
            {
                var sum = 0;
                for (int i = 0; i < points.Count; i++)
                {
                    var nextPointIndex = i + 1;
                    if (nextPointIndex == points.Count)
                    {
                        nextPointIndex = 0;
                    }
                    
                    var firstPoint = points[i];
                    var secondPoint = points[nextPointIndex];
                    
                    sum += firstPoint.X*secondPoint.Y - firstPoint.Y*secondPoint.X;
                }
                
                return Math.Abs(sum)/2;
            }


      Добавлено
      Только надо:
      ExpandedWrap disabled
        return Math.Abs(sum)/2.0;
        Цитата Profi @
        Парни, а как же формула Гаусса?

        Это то, что я векторным произведением назвал.
          Цитата Profi @
          а как же формула Гаусса?

          Трапеции сводятся практически к тому же. Строка из моего поста с прошлой страницы:
          ExpandedWrap disabled
            s = s + (V(i1).y - V(i).y) * (V(i1).x + V(i).x)
            Можно даже избавиться от надоедливого if:
            ExpandedWrap disabled
                  public static double Shoelace(IList<Point> points)
                  {
                      var redundantPoints = points.Concat(new [] {points[0]}).ToList();
                      var sum = 0;
                      for (int i = 0; i < redundantPoints.Count - 1; i++)
                      {
                          var firstPoint = redundantPoints[i];
                          var secondPoint = redundantPoints[i + 1];
                          
                          sum += firstPoint.X*secondPoint.Y - firstPoint.Y*secondPoint.X;
                      }
                      
                      return Math.Abs(sum)/2.0;
                  }


            Добавлено
            Цитата OpenGL @
            Цитата Profi @
            Парни, а как же формула Гаусса?

            Это то, что я векторным произведением назвал.

            Ну, она из него вытекает, да. Просто не видел кода, думал никто и не предложил.

            Добавлено
            Цитата Mikle @
            Цитата Profi @
            а как же формула Гаусса?

            Трапеции сводятся практически к тому же. Строка из моего поста с прошлой страницы:
            ExpandedWrap disabled
              s = s + (V(i1).y - V(i).y) * (V(i1).x + V(i).x)

            Ну, как бы нет. Сложность такая же, но все же подход разный.

            Добавлено
            Кстати, все методы работают только для отсортированного списка вершин. Но накидать сортировку по центроиду - не сложно.
              Цитата Profi @
              все методы работают только для отсортированного списка вершин

              Так без сортировки выходит неоднозначно, ответы разные.
              Цитата Profi @
              все же подход разный

              Я ж написал, что "практически к тому же". Не совсем, да.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0283 ]   [ 15 queries used ]   [ Generated: 8.06.23, 21:56 GMT ]