![]() |
Сортировка вершин
Нужно отсортировать 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; } |
Ответ: Сортировка вершин
я делал это, но в том проекте адовый говнокод, это было давно и на блиц3д.
но суть такова: ты делаешь то же самое что и в 2д, но в пространстве выбранного полигона. т.е. если речь о блиц3д, то ты можешь создать пивот, поставить его в центр полигона и сделать ему AlignToNormal к нормали полика, затем TFormPoint'ить точки полигона в пространство пивота и сортировать по/против часовой стрелки. |
Ответ: Сортировка вершин
не, не блиц3д.
забыл сказать, что вершины все будут на одной плоскости. вообщем пытаюсь написать алгоритм соединения двух полигонов. |
Ответ: Сортировка вершин
тогда как вершины спроецировать на плоскость XY? Если нормаль плоскости на которой они лежали известна.
|
Часовой пояс GMT +4, время: 21:25. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot