
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.205.26.39] |
![]() |
|
Страницы: (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 @ все же подход разный Я ж написал, что "практически к тому же". Не совсем, да. |