@Test public void testStepAlongLine() { IVector2 start = Vector2.fromXY(5, 12); IVector2 end = Vector2.fromXY(30, 400); ILineSegment segment = LineSegment.fromPoints(start, end); IVector2 displacement = end.subtractNew(start); for (int stepSize = -10000; stepSize <= 10000; stepSize += 100) { IVector2 expected = displacement.scaleToNew(stepSize).add(start); IVector2 actual = segment.stepAlongLine(stepSize); assertThat(actual, is(expected)); } }
@Override public IVector2 stepAlongLine(final double stepSize) { if (!isValid()) { return getStart(); } return LineMath.stepAlongLine(getStart(), getEnd(), stepSize); }
LineSegment extends ALine implements ILineSegment { @Override public IVector2 stepAlongLine(final double stepSize) { if (!isValid()) { return getStart(); } return LineMath.stepAlongLine(getStart(), getEnd(), stepSize); } }
LineSegment extends ALine implements ILineSegment { @Override public IVector2 stepAlongLine(final double stepSize) { if (!isValid()) { return getStart(); } return LineMath.stepAlongLine(getStart(), getEnd(), stepSize); } @SuppressWarnings("unused") private  LineSegment(); private  LineSegment(final IVector2 start, final IVector2 end); }
LineSegment extends ALine implements ILineSegment { @Override public IVector2 stepAlongLine(final double stepSize) { if (!isValid()) { return getStart(); } return LineMath.stepAlongLine(getStart(), getEnd(), stepSize); } @SuppressWarnings("unused") private  LineSegment(); private  LineSegment(final IVector2 start, final IVector2 end); static ILineSegment fromOffset(final IVector2 supportVector, final IVector2 offset); static ILineSegment fromPoints(final IVector2 start, final IVector2 end); @Override boolean isValid(); @Override final boolean equals(final Object other); @Override final int hashCode(); @Override IVector2 getStart(); @Override IVector2 getEnd(); @Override IVector2 getCenter(); @Override double getLength(); @Override IVector2 directionVector(); @Override IVector2 closestPointOnLine(final IVector2 point); @Override ILine toLine(); @Override IHalfLine toHalfLine(); @Override ILineSegment copy(); @Override Optional<IVector2> intersectLine(final ILine line); @Override Optional<IVector2> intersectHalfLine(final IHalfLine halfLine); @Override Optional<IVector2> intersectSegment(final ILineSegment other); @Override IVector2 stepAlongLine(final double stepSize); @Override ILineSegment withMargin(final double margin); @Override String toString(); @Override List<IVector2> getSteps(final double stepSize); }
LineSegment extends ALine implements ILineSegment { @Override public IVector2 stepAlongLine(final double stepSize) { if (!isValid()) { return getStart(); } return LineMath.stepAlongLine(getStart(), getEnd(), stepSize); } @SuppressWarnings("unused") private  LineSegment(); private  LineSegment(final IVector2 start, final IVector2 end); static ILineSegment fromOffset(final IVector2 supportVector, final IVector2 offset); static ILineSegment fromPoints(final IVector2 start, final IVector2 end); @Override boolean isValid(); @Override final boolean equals(final Object other); @Override final int hashCode(); @Override IVector2 getStart(); @Override IVector2 getEnd(); @Override IVector2 getCenter(); @Override double getLength(); @Override IVector2 directionVector(); @Override IVector2 closestPointOnLine(final IVector2 point); @Override ILine toLine(); @Override IHalfLine toHalfLine(); @Override ILineSegment copy(); @Override Optional<IVector2> intersectLine(final ILine line); @Override Optional<IVector2> intersectHalfLine(final IHalfLine halfLine); @Override Optional<IVector2> intersectSegment(final ILineSegment other); @Override IVector2 stepAlongLine(final double stepSize); @Override ILineSegment withMargin(final double margin); @Override String toString(); @Override List<IVector2> getSteps(final double stepSize);  }