/******************************************************************************* * Copyright (c) 2004, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.draw2d.graph; import org.eclipse.draw2d.geometry.Geometry; import org.eclipse.draw2d.geometry.Point; /** * A Segment representation for the ShortestPathRouting. A segment is a line between * two vertices. * * This class is for internal use only * @author Whitney Sorenson * @since 3.0 */ class Segment { Vertex start, end; /** * Creates a segment between the given start and end points. * @param start the start vertex * @param end the end vertex */ Segment(Vertex start, Vertex end) { this.start = start; this.end = end; } /** * Returns the cosine of the made between this segment and the given segment * @param otherSegment the other segment * @return cosine value (not arc-cos) */ double cosine(Segment otherSegment) { double cos = (((start.x - end.x) * (otherSegment.end.x - otherSegment.start.x)) + ((start.y - end.y) * (otherSegment.end.y - otherSegment.start.y))) / (getLength() * otherSegment.getLength()); double sin = (((start.x - end.x) * (otherSegment.end.y - otherSegment.start.y)) - ((start.y - end.y) * (otherSegment.end.x - otherSegment.start.x))); if (sin < 0.0) return (1 + cos); return -(1 + cos); } /** * Returns the cross product of this segment and the given segment * @param otherSegment the other segment * @return the cross product */ long crossProduct(Segment otherSegment) { return (((start.x - end.x) * (otherSegment.end.y - end.y)) - ((start.y - end.y) * (otherSegment.end.x - end.x))); } private double getLength() { return (end.getDistance(start)); } /** * Returns a number that represents the sign of the slope of this segment. It does * not return the actual slope. * @return number representing sign of the slope */ double getSlope() { if (end.x - start.x >= 0) return (end.y - start.y); else return -(end.y - start.y); } /** * Returns true if the given segment intersects this segment. * @param sx start x * @param sy start y * @param tx end x * @param ty end y * @return true if the segments intersect */ boolean intersects(int sx, int sy, int tx, int ty) { return Geometry.linesIntersect(start.x, start.y, end.x, end.y, sx, sy, tx, ty); } /** * Return true if the segment represented by the points intersects this segment. * @param s start point * @param t end point * @return true if the segments intersect */ boolean intersects(Point s, Point t) { return intersects(s.x, s.y, t.x, t.y); } /** * @see java.lang.Object#toString() */ public String toString() { return start + "---" + end; //$NON-NLS-1$ } }