Страница 1 из 2

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 30 авг 2009, 13:59
E3605
Здравствуйте.

Уверен, что это задача стандартная, но не могу никак найти на неё ответ. Мозг совершенно отказывается что-то придумывать...

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

И плюс ещё не знаю точно, будет ли это работать для невыпуклого или самопересекающегося многоугольника?

P. S. A если есть какая-нибудь готовая функция в Delphi для этого или в каких-нибудь библиотеках типа OpenGL, было бы вообще шикарно...

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 30 авг 2009, 14:13
qazxsw
Разбиваете на треугольники и для каждого из них считаете векторное произведение. Половина модуля вектора - площадь нужного треугольника.

Или что то же самое - считаете площади 3х проекций на плоскости координат, a дальше корень из суммы 3х квадратов

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 30 авг 2009, 14:41
ALEX165
del

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 30 авг 2009, 20:07
VAL
E3605 писал(а):Source of the post
Насколько я помню, в плоскости это делается просто - по всем парам соседних точек складываются произведения полусуммы X-ов и разности Y-ков... a вот как быть в пространстве, при условии, что плоскость многоугольника ориентирована произвольным образом? Надо как-то перейти к новой плоской системе координат, и я что-то не пойму как...

И плюс ещё не знаю точно, будет ли это работать для невыпуклого или самопересекающегося многоугольника?
Полчаса набирал развернутый ответ c длинными формулами и границами их применимости.
A потом случайно прибил

Теперь напишу кратко:
Проектируете многоугольник на координатную плоскость (забываете про одну координату), ищете площадь и делите на косинус угла между исходной плоскостью и плоскостью, на которую спроектировали.

E3605 писал(а):Source of the post
И плюс ещё не знаю точно, будет ли это работать для невыпуклого или самопересекающегося многоугольника?
Ладно, наберу еще раз (не все, a сколько осилю).
Для произвольного (не обязательно выпуклого, возможно, имеющего дыры, но не самопересекающегося) многоугольника справедлива такая формула:
$$S=\sum_{i=1}^k l_i\overline{OM_i}\overline{n_i}$$, где $$O$$ - произвольная точка плоскости, $$M_i$$ - вершины, $$l_i$$, длины сторон, a $$\overline{n_i}$$ - единичные векторы, направленные вовне многоугольника.

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 03:47
qazxsw
VAL писал(а):Source of the post
Проектируете многоугольник на координатную плоскость (забываете про одну координату), ищете площадь и делите на косинус угла между исходной плоскостью и плоскостью, на которую спроектировали.

Действительно. Выпало из головы. Вот только если вопрос заключается в написании процедурки для такого, видимо процедурка должна начать c того, что выбрать из этих 3х координатных плоскостей ту, к которой нужная плоскость не стоит боком (чтоб не было деления на 0, которое нам ничего не даст) A поэтому для написания программки я бы все-таки выбрал корень из суммы квадратов проекций

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 06:23
VAL
qazxsw писал(а):Source of the post
VAL писал(а):Source of the post
Проектируете многоугольник на координатную плоскость (забываете про одну координату), ищете площадь и делите на косинус угла между исходной плоскостью и плоскостью, на которую спроектировали.

Действительно. Выпало из головы. Вот только если вопрос заключается в написании процедурки для такого, видимо процедурка должна начать c того, что выбрать из этих 3х координатных плоскостей ту, к которой нужная плоскость не стоит боком (чтоб не было деления на 0, которое нам ничего не даст)
Угу. B посте, который я случайно убил, у меня про это было написано
Впрочем, странник, который задал вопрос, похоже, уже далеко.

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 11:02
ALEX165
A чем не нравится #2?

$$S=\frac{1}{2}|\sum_{i=1}^{n-1} (\vec X_{i+1}-\vec X_i) \times (\vec X_{i+2}-\vec X_{i+1})|$$,

где: $$\vec X_i=(X_{i,1},X_{i,2},X_{i,3})$$ - векторы вершин и $$\vec X_{n+1}=\vec X_1$$, n - число вершин.

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 11:26
qazxsw
A он чем-то кроме записи отличается от "посчитать 3 проекции и взять корень из суммы квадратов от них"? Если я правильно понял, то этот S - вектор, a надо площадь те модуль этого вектора. A модуль его как раз корень из суммы квадратов, притом не удивлюсь если значения его компонент будут точно те, что и площади проекций (разве что мб знаки будет иметь, но и площади проекций без знаков будут только после применения модуля)

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 11:29
ALEX165
qazxsw писал(а):Source of the post
A он чем-то кроме записи отличается от "посчитать 3 проекции и взять корень из суммы квадратов от них"? Если я правильно понял, то этот S - вектор, a надо площадь те модуль этого вектора. A модуль его как раз корень из суммы квадратов, притом не удивлюсь если значения его компонент будут точно те, что и площади проекций (разве что мб знаки будет иметь, но и площади проекций без знаков будут только после применения модуля)


A Вы на палочки модуля не обратили внимания? Присмотритесь, a S - скаляр.

Площадь плоского многоугольника в трёхмерной системе координат

Добавлено: 31 авг 2009, 11:36
qazxsw
Ну да. B таком случае обратите что я писал дальше после того как написал что S -вектор. Применение палочек модуля к вектору - это корень суммы квадратов причем компоненты вектора вероятнее всего уже будут этими площадями. Так что это просто другая запись того же самого и все.
(перевожу: B принципе нравится, но это то же самое)