Нахождение площади многоугольника
    , численное интегрирование
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    правила раздела Алгоритмы
  
| Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) | 
    Нахождение площади многоугольника
    , численное интегрирование
  | 
         
         
         
          
           Сообщ.
           #16
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @   Вот это не понял. Если сторона параллельна OY, тогда да, можно брать как +, так и -, т.к. площадь соответствующей трапеции нулевая. А если параллельно OX, то никаких нет нюансов.  все, теперь я точно понял чего-то я тупо ступил, посчитав, что, когда линия || Ox, то координата по Х НЕ меняется, ужс...( она не меняется для || Oy )  | 
    
| 
         
         
         
          
           Сообщ.
           #17
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Парни, а как же формула Гаусса? 
        
      ![]() ![]()     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;     } Добавлено Только надо: ![]() ![]() return Math.Abs(sum)/2.0;  | 
    
| 
         
         
         
          
           Сообщ.
           #18
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Profi @   Парни, а как же формула Гаусса? Это то, что я векторным произведением назвал.  | 
    
| 
         
         
         
          
           Сообщ.
           #19
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Profi @  а как же формула Гаусса? Трапеции сводятся практически к тому же. Строка из моего поста с прошлой страницы: ![]() ![]() s = s + (V(i1).y - V(i).y) * (V(i1).x + V(i).x)  | 
    
| 
         
         
         
          
           Сообщ.
           #20
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Можно даже избавиться от надоедливого if: 
        
      ![]() ![]()     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 @  а как же формула Гаусса? Трапеции сводятся практически к тому же. Строка из моего поста с прошлой страницы: ![]() ![]() s = s + (V(i1).y - V(i).y) * (V(i1).x + V(i).x) Ну, как бы нет. Сложность такая же, но все же подход разный. Добавлено Кстати, все методы работают только для отсортированного списка вершин. Но накидать сортировку по центроиду - не сложно.  | 
    
| 
         
         
         
          
           Сообщ.
           #21
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Profi @  все методы работают только для отсортированного списка вершин Так без сортировки выходит неоднозначно, ответы разные. Цитата Profi @  все же подход разный Я ж написал, что "практически к тому же". Не совсем, да.  |