Опубликован: 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.;
    }
}
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия