Опубликован: 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);
}
}