Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 08.10.2010, 22:24   #1
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Сортировка вершин

Нужно отсортировать 3д вершины, чтобы из них получился правильный полигон.
Для 2д это делается сортировкой по полярному углу относительно вершины с самой маленькой координатой.

private void sort(Vector<Point> points) {
Point p0 = getMinPoint(points);
points.remove(p0);
sort(points, p0);
points.insertElementAt(p0, 0);
}
private void sort(Vector<Point> points, Point p0) {
boolean sort = true;
while(sort) {
sort = false;
for(int i=0; i<points.size()-1; i++) {
Point a = points.get(i);
Point b = points.get(i+1);
float t1 = (float)(a.x-p0.x)/(a.y-p0.y);
float t2 = (float)(b.x-p0.x)/(b.y-p0.y);
if(t1 > t2) {
swap(points, i, i+1);
sort = true;
}
}
}
}
private Point getMinPoint(Vector<Point> points) {
Point p0 = points.get(0);
for(int i=1; i<points.size(); i++) {
Point p =points.get(i);
if(p.y*10000+p.x < p0.y*10000+p0.x) p0 = p;
}
return p0;
}
(Offline)
 
Ответить с цитированием
Старый 09.10.2010, 13:31   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Сортировка вершин

я делал это, но в том проекте адовый говнокод, это было давно и на блиц3д.
но суть такова: ты делаешь то же самое что и в 2д, но в пространстве выбранного полигона. т.е. если речь о блиц3д, то ты можешь создать пивот, поставить его в центр полигона и сделать ему AlignToNormal к нормали полика, затем TFormPoint'ить точки полигона в пространство пивота и сортировать по/против часовой стрелки.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (09.10.2010)
Старый 09.10.2010, 14:44   #3
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Сортировка вершин

не, не блиц3д.
забыл сказать, что вершины все будут на одной плоскости.
вообщем пытаюсь написать алгоритм соединения двух полигонов.
(Offline)
 
Ответить с цитированием
Старый 12.10.2010, 00:25   #4
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Сортировка вершин

тогда как вершины спроецировать на плоскость XY? Если нормаль плоскости на которой они лежали известна.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:57.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com