@Override public E rotateCCW(int axis) { return vec.clone().rotateCCW(axis); }
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)); }
private <E extends Vector<E>> E[] generateExtrudedPoints( ImmutableVector<E> first, ImmutableVector<E> mid, ImmutableVector<E> last, float extrude) { ImmutableVector<E> dir1 = mid.clone().sub(first); ImmutableVector<E> dir2 = last.clone().sub(mid); ImmutableVector<E> left = dir1.clone().rotateCCW(2).normalize().mul(extrude); ImmutableVector<E> right = left.clone().mul(-1); if (dir1.isParrallelTo(dir2)) { return toArray(mid.clone().add(left), mid.clone().add(right)); } Line<E> firstLeft = Line.fromPoints(first.clone().add(left), mid.clone().add(left)); Line<E> firstRight = Line.fromPoints(first.clone().add(right), mid.clone().add(right)); left = dir2.clone().rotateCCW(2).normalize().mul(extrude); right = left.clone().mul(-1); Line<E> secondLeft = Line.fromPoints(last.clone().add(left), mid.clone().add(left)); Line<E> secondRight = Line.fromPoints(last.clone().add(right), mid.clone().add(right)); try { E leftResult = firstLeft.getIntersection(secondLeft); E rightResult = firstRight.getIntersection(secondRight); return toArray(leftResult, rightResult); } catch (Throwable t) { System.out.println(t); dir1.isParrallelTo(dir2); throw t; } }