Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 13:
Изображение полиэдра
Полный текст проекта
Сначала приведем содержание управляющего файла для утилиты make.
MAKEFILE
# -*- mode: makefile -*- .PHONY : all doc clean veryclean cube ccc sticks tagl king dragon \ x29 apple glass4 torus pear vw bones beeth teapot cow babem JAVAC = javac JAVAFILES := Xterm.java R3Vector.java Vertex.java Edge.java Facet.java \ Polyedr.java Segment.java L1ListSegments.java \ AwtDrawer.java SimpleDrawer.java ShadowDrawer.java \ SmartDrawer.java PolyedrTest.java CLASSFILES := Xterm.class R3Vector.class Vertex.class Edge.class Facet.class \ Polyedr.class Segment.class L1ListSegments.class \ AwtDrawer.class SimpleDrawer.class ShadowDrawer.class \ SmartDrawer.class PolyedrTest.class %.class: %.java $(JAVAC) $< cube: $(CLASSFILES) java PolyedrTest data/cube.geom ccc: $(CLASSFILES) java PolyedrTest data/ccc.geom sticks: $(CLASSFILES) java PolyedrTest data/sticks.geom tagl: $(CLASSFILES) java PolyedrTest data/tagl.geom king: $(CLASSFILES) java PolyedrTest data/king.geom dragon: $(CLASSFILES) java PolyedrTest data/dragon.geom x29: $(CLASSFILES) java PolyedrTest data/x29.geom apple: $(CLASSFILES) java PolyedrTest data/apple_logo.geom glass4: $(CLASSFILES) java PolyedrTest data/glass4.geom torus: $(CLASSFILES) java PolyedrTest data/torus.geom pear: $(CLASSFILES) java PolyedrTest data/pear.geom vw: $(CLASSFILES) java PolyedrTest data/vw.geom bones: $(CLASSFILES) java PolyedrTest data/foot_bones.geom beeth: $(CLASSFILES) java PolyedrTest data/beethoven.geom teapot: $(CLASSFILES) java PolyedrTest data/teapot.geom cow: $(CLASSFILES) java PolyedrTest data/cow.geom babem: $(CLASSFILES) java PolyedrTest data/babem.geom doc: javadoc -d doc -version -author -private *.java expand: for i in Makefile *.java; do expand $$i >$$i.expand; done clean: rm -f *.class *.expand veryclean: rm -f *.class *.expand doc/*.html
А вот как выглядят все остальные файлы проекта.
R3Vector.java
/** * @author Е.А. Роганов * @version 1.1 * Класс R3Vector, реализующий вектор (Vector) в пространстве (R3). */ public class R3Vector { /** * Координаты вектора. */ private double x, y, z; /** * Конструктор вектора, заданного его координатами. * @param x X-координата вектора. * @param y Y-координата вектора. * @param z Z-координата вектора. */ public R3Vector(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } /** * Конструктор вектора, координаты которого вводятся с клавиатуры. * @exception Exception Исключительная ситуация, возникающая * при ошибках ввода координат с клавиатуры. */ public R3Vector() throws Exception { x = Xterm.inputDouble("X-коорд. вектора проектирования -> "); y = Xterm.inputDouble("Y-коорд. вектора проектирования -> "); z = Xterm.inputDouble("Z-коорд. вектора проектирования -> "); } /** * Получить X-координату вектора. * @return X-координата вектора. */ public final double getX() { return x; } /** * Получить Y-координату вектора. * @return Y-координата вектора. */ public final double getY() { return y; } /** * Получить Z-координату вектора. * @return Z-координата вектора. */ public final double getZ() { return z; } /** * Нормировать ненулевой вектор. */ public final R3Vector normalize() { double norm = Math.sqrt(x*x+y*y+z*z); x /= norm; y /= norm; z /= norm; return this; } /** * Найти сумму двух векторов. * @param a Первый вектор-слагаемое. * @param b Второй вектор-слагаемое. * @return Сумма векторов. */ public static R3Vector plus(R3Vector a, R3Vector b) { return new R3Vector(a.x+b.x, a.y+b.y, a.z+b.z); } /** * Добавить заданный вектор. * @param b Добавляемый вектор. * @return Вектор-результат. */ public final R3Vector plus(R3Vector b) { x += b.x; y += b.y; z += b.z; return this; } /** * Найти разность двух векторов. * @param a Вектор-уменьшаемое. * @param b Вектор-вычитаемое. * @return Разность векторов. */ public static R3Vector minus(R3Vector a, R3Vector b) { return new R3Vector(a.x-b.x, a.y-b.y, a.z-b.z); } /** * Вычесть заданный вектор. * @param b Вычитаемый вектор. * @return Вектор-результат. */ public final R3Vector minus(R3Vector b) { x -= b.x; y -= b.y; z -= b.z; return this; } /** * Найти произведение вектора на число. * @param k Число, на которое умножается вектор. * @param a Исходный вектор. * @return Вектор-результат. */ public static R3Vector mul(double k, R3Vector a) { return new R3Vector(k*a.x, k*a.y, k*a.z); } /** * Умножить вектор на заданное число. * @param k Число, на которое умножается вектор. * @return Вектор-результат. */ public final R3Vector mul(double k) { x *= k; y *= k; z *= k; return this; } /** * Найти скалярное произведение векторов. * @param a Первый вектор. * @param b Второй вектор. * @return Скалярное произведение векторов. */ public static double scalMul(R3Vector a, R3Vector b) { return a.x*b.x + a.y*b.y + a.z*b.z; } /** * Найти векторное произведение векторов. * @param a Первый вектор. * @param b Второй вектор. * @return Векторное произведение векторов. */ public static R3Vector vectMul(R3Vector a, R3Vector b) { return new R3Vector(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x); } }