Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 13:

Изображение полиэдра

Polyedr.java

import java.util.*;
import java.io.*;
/**
 * @author Е.А. Роганов
 * @version 1.1
 * Класс Polyedr, реализующий полиэдр.
 */
public class Polyedr {
    /**
     * Массив вершин полиэдра.
     */
    private Vertex[] vertexes;
    /**
     * Массив ребер полиэдра.
     */
    private Edge[]   edges;
    /**
     * Массив граней полиэдра.
     */
    private Facet[]  facets;

    /**
     * Конструктор класса.
     * @param file Файл, содержащий описание полиэдра.
     * @exception Exception Исключительная ситуация, возникающая при
     * ошибках чтения или преобразования данных.
     */
    public Polyedr(String file) throws Exception {
	RandomAccessFile f = new RandomAccessFile(file, "r");
	StringTokenizer st = new StringTokenizer(f.readLine());

	vertexes  = new Vertex[Integer.parseInt(st.nextToken())];
	facets = new Facet[Integer.parseInt(st.nextToken())];
	edges  = new Edge[Integer.parseInt(st.nextToken())];	
	
	for (int i=0; i<vertexes.length; i++) {
	    st = new StringTokenizer(f.readLine());
	    double x = Double.valueOf(st.nextToken()).doubleValue();
	    double y = Double.valueOf(st.nextToken()).doubleValue();
	    double z = Double.valueOf(st.nextToken()).doubleValue();
	    vertexes[i] = new Vertex(x,y,z);
	}
	int k = 0;
	for (int i=0; i<facets.length; i++) {
	    st = new StringTokenizer(f.readLine());
	    int size = Integer.parseInt(st.nextToken());
	    Vertex[] facet = new Vertex[size];
	    facet[0] = vertexes[Integer.parseInt(st.nextToken()) - 1];
	    for (int j=1; j<size; j+=1) {
		facet[j] = vertexes[Integer.parseInt(st.nextToken()) - 1];
		edges[k++] = new Edge(facet[j], facet[j-1]);
	    }
	    edges[k++] = new Edge(facet[size-1], facet[0]);
	    facets[i] = new Facet(facet);
	}
    }
    /**
     * Получить количество вершин.
     * @return Количество вершин полиэдра.	
     */
    public final int getVertexesQuantity() {
	return vertexes.length;
    }
    /**
     * Получить вершину.
     * @param i Номер вершины.
     * @return Вершина полиэдра.
     */
    public final Vertex getVertex(int i) {
	return vertexes[i];
    }
    /**
     * Получить количество ребер.
     * @return Количество ребер полиэдра.	
     */
    public final int getEdgesQuantity() {
	return edges.length;
    }
    /**
     * Получить ребро.
     * @param i Номер ребра.
     * @return Ребро полиэдра.
     */
    public final Edge getEdge(int i) {
	return edges[i];
    }
    /**
     * Получить количество граней.
     * @return Количество граней полиэдра.	
     */
    public final int getFacetsQuantity() {
	return facets.length;
    }
    /**
     * Получить грань.
     * @param i Номер грани.
     * @return Грань полиэдра.
     */
    public final Facet getFacet(int i) {
	return facets[i];
    }
}

Segment.java

/**
 * @author Е.А. Роганов
 * @version 1.q	
 * Класс Segment, реализующий одномерный отрезок.
 */
public class Segment {
    /**
     * Координаты начала и конца отрезка.
     */
    private double begin, end;

    /**
     * Конструктор отрезка.
     * @param begin Начало отрезка.
     * @param end Начало отрезка.
     */
    public Segment(double begin, double end) {
	this.begin = begin; this.end = end;
    }
    /**
     * Вырожден ли отрезок?
     * @return Вырожден ли отрезок?
     */
    public final boolean degenerate() {
	return begin >= end;
    }
    /**
     * Найти левый отрезок разности с отрезком s.
     * @param s Вычитаемый отрезок.
     * @return Левый отрезок разности.
     */
    public final Segment leftSub(Segment s) {
	return new Segment(begin, Math.min(end, s.begin));
    }
    /**
     * Найти правый отрезок разности с отрезком s.
     * @param s Вычитаемый отрезок.
     * @return Правый отрезок разности.
     */
    public final Segment rightSub(Segment s) {
	return new Segment(Math.max(begin, s.end), end);
    }
    /**
     * Найти пересечение с отрезком s.
     * @param s Отрезок, с которым находится пересечение.
     * @return Отрезок-пересечение.
     */
    public final Segment intersection(Segment s) {
	begin = Math.max(begin, s.begin);
	end = Math.min(end, s.end);
	return this;
    }
    /**
     * Получить начало отрезка.
     * @return Начало отрезка.
     */
    public final double getBegin() {
	return begin;
    }
    /**
     * Получить конец отрезка.
     * @return Конец отрезка.
     */
    public final double getEnd() {
	return end;
    }
}
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия