Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 13:
Изображение полиэдра
Vertex.java
/** * @author Е.А. Роганов * @version 1.1 * Класс Vertex, реализующий вершину полиэдра. */ public class Vertex extends R3Vector { /** * Конструктор. * @param x X-координата вершины. * @param y Y-координата вершины. * @param z Z-координата вершины. */ public Vertex(double x, double y, double z) { super(x, y, z); } }
Edge.java
/** * @author Е.А. Роганов * @version 1.1 * Класс Edge, реализующий ребро полиэдра. */ public class Edge { /** * Начало ребра. */ private Vertex begin; /** * Конец ребра. */ private Vertex end; /** * Конструктор. * @param begin Начало ребра. * @param end Конец ребра. */ public Edge(Vertex begin, Vertex end) { this.begin = begin; this.end = end; } /** * Получить начало ребра. * @return Начало ребра. */ public final Vertex getBegin() { return begin; } /** * Получить конец ребра. * @return Конец ребра. */ public final Vertex getEnd() { return end; } }
Facet.java
/** * @author Е.А. Роганов * @version 1.1 * Класс Facet, реализующий грань полиэдра. */ public class Facet { /** * Массив вершин полиэдра, принадлежащих грани. */ private Vertex[] vertexes; /** * Центр грани. */ private R3Vector center; /** * Вектор нормали к грани. */ private R3Vector normal; /** * Конструктор. * @param vertexes Вершины полиэдра, образующие грань. */ public Facet(Vertex[] vertexes) { this.vertexes = vertexes; normal = R3Vector.vectMul(R3Vector.minus(vertexes[1], vertexes[0]), R3Vector.minus(vertexes[2], vertexes[0])); center = new R3Vector(0., 0., 0.); for (int i=0; i<vertexes.length; i++) { center.plus(vertexes[i]); } center.mul(1./(double)vertexes.length); } /** * Получить количество вершин. * @return Количество вершин грани. */ public final int getVertexesQuantity() { return vertexes.length; } /** * Получить вершину. * @param i Номер вершины. * @return Вершина грани. */ public final Vertex getVertex(int i) { return vertexes[i]; } /** * Получить центр грани. * @return Центр грани. */ public final R3Vector getCenter() { return center; } /** * Получить нормаль к грани. * @return Нормаль грани. */ public final R3Vector getNormal() { return normal; } /** * Является ли грань "вертикальной"? * @param pr Вектор проектирования. * @return Параллельна ли грань вектору проектирования? */ public final boolean vertical(R3Vector pr) { return R3Vector.scalMul(normal, pr) == 0.; } }