LINUX.ORG.RU

Сортировка точек

 ,


0

1

Есть массив точек, содержащих координаты на плоскости (x, y). Все множество точек принадлежит граням геометрической фигуры, т.е. они очерчивают некую замкнутую область. Фигура может быть произвольной и неправильной формы.

Проблема заключается в том, что точки в массиве идут несортированными, в произвольном порядке. А нужно их отсортировать в той последовательности, в какой они очерчивают замкнутую область (по периметру), т.е. как я это вижу, то точки, находящиеся рядом в двумерном пространстве, должны быть рядом и в массиве.

Может быть кто подскажет, как их отсортировать?


Вычисляешь центр тяжести фигуры. Принимаешь его за начало отсчета. Координаты всех точек переводишь в полярную систему. Сортируешь по углу.

Если фигура самопересекающаяся, придется выдумывать что-нибудь еще

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Так мы про фигуру вроде ничего не знаем по условию. Только массив с точками есть и все. Как же ж нам центр тяжести вычислить? Знали бы мы фигуру, мы б просто ребра по порядку перебрали, находя все точки, им принадлежащие.

roof ★★
()
Ответ на: комментарий от roof

Как же ж нам центр тяжести вычислить?

\frac{1}{N}\sum_{i=1}{N} (\vec\i\cdot x_i + \vec\j\cdot y_i)

Знали бы мы фигуру, мы б просто ребра по порядку перебрали, находя все точки, им принадлежащие.

Можно что-нибудь придумать. От конкретной задачи зависит

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Вычисляешь центр тяжести фигуры.
Если фигура самопересекающаяся, придется выдумывать что-нибудь еще

Сортировка по полярному углу не работает для невыпуклых фигур без самопересечений. Пример (вообрази хвост достаточно длинным).

metar ★★★
()
Ответ на: комментарий от metar

Строим диаграмму Вороного, выделяем соседей, сортируем

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Реквестирую поддержку теха в lorcode.

anonymous
()
Ответ на: комментарий от Eddy_Em

\frac{1}{N}\sum_{i=1}{N} (\vec\i\cdot x_i + \vec\j\cdot y_i)

для быстрого отображения попробовал это. Работает. И опечатку видно:

- \sum_{i=1}{N}
+ \sum_{i=1}^{N}

gag ★★★★★
()
Ответ на: комментарий от gag

Прикольный сервис. Я, правда, скриптом пользуюсь, чтобы для веб-страниц формулы генерировать:

#!/bin/sh
if [ "$1" = "" ]; then
	echo "usage: $0 <latex string without \$s>"
	exit
fi
[ "$2" != "" ] && pngname="$2" || pngname="out.png"
mask=tmp_$$
texfile=${mask}.tex
cat > $texfile << EOF
\documentclass[12pt]{article}
\usepackage[english, russian]{babel}
\usepackage[koi8-r]{inputenc}
\usepackage[matrix,arrow,curve]{xy}
\usepackage[intlimits]{amsmath}
\usepackage{amsfonts}
\pagestyle{empty}
\setbox0=\hbox{$\displaystyle
EOF

echo "$1" >> $texfile

cat >> $texfile << EOF
$}
\textwidth=\wd0
\textheight=\ht0
\advance\textwidth by 2em
\advance\textheight by 2\dp0
\topmargin=-1.5cm
\oddsidemargin=-1cm
\begin{document}
\vbox{\vss\hbox{\hss\copy0\hss}\vss}
\end{document}
EOF

latex $texfile
dvipng -D 600 ${mask}.dvi -o $pngname
rm -f ${mask}*

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.