private <E extends Vector<E>> E[] generateExtrudedEndPoints( ImmutableVector<E> end, ImmutableVector<E> other, float extrude) { Vector<E> dir = other.clone().sub(end); ImmutableVector<E> ex = dir.clone().rotateCCW(2).normalize(); return toArray( ex.clone().mul(extrude).add(end), ex.clone().mul(-extrude).add(end)); }
@Override public E div(ImmutableVector<E> b) { return vec.clone().div(b); }
public boolean isElement(ImmutableVector<E> point) { Vector<E> t = point.clone().sub(start); Vector<E> dir = end.clone().sub(start); if (t.isParrallelTo(dir)) { float[] dc = dir.getCoords(); for (int i = 0; i < dc.length; i++) { if (dc[i] != 0) { float mul = t.getCoords()[i] / dc[i]; return 0 <= mul && mul <= 1f; } } } return false; }
last = segments.next(); E dir1 = start.clone().sub(last.getStart()); E dir2 = start.clone().sub(last.getEnd()); E dir3 = last.getStart().clone().sub(last.getEnd()); double a = dir1.length(); double b = dir2.length(); double c = dir3.length(); double s = (a + b + c) * 0.5; double area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
public double distanceQuad(ImmutableVector<E> v) { return clone().sub(v).lengthQuad(); }
public boolean contains(ImmutableVector<E> p) { return p.clone().sub(a).isParrallelTo(dir); }
@Override public E sub(float b) { return vec.clone().sub(b); }
@Override public E add(ImmutableVector<E> b) { return vec.clone().add(b); }
public E invert() { return (E) mul(-1); } }
@Override public E rotateCCW(int axis) { return vec.clone().rotateCCW(axis); }
public Line(ImmutableVector<E> a, ImmutableVector<E> dir) { if (dir.lengthQuad() == 0.) { throw new IllegalArgumentException("The direction vector must not have a length of zero!"); } this.a = a.clone(); this.dir = dir.clone().normalize(); }
public Vector3 getViewDirection() { float[] f = inverse().getColumn(2).getCoords(); return new Vector3(f[0], f[1], f[2]); }
public double distanceToSquared(ImmutableVector<E> p) { Vector<E> tmp = a.clone().sub(p); return tmp.lengthQuad() - dir.dot(tmp); }