Skip to content

Commit

Permalink
#29: method for creating line based on starting point, angle and length
Browse files Browse the repository at this point in the history
  • Loading branch information
smirnovegorv committed Apr 4, 2024
1 parent 64ec2fb commit bec29c2
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

group 'ru.itmo.idu'
version '3.7.0'
version '3.8.0'

repositories {
maven {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/ru/itmo/idu/geometry/GeometryUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,24 @@ public static LineString makeLine(Coordinate start, Coordinate end) {
);
}

public static LineString makeLine(Point start, Point end) {
return makeLine(start.getCoordinate(), end.getCoordinate());
}

/**
* Same as makeLine(start, length, angle). Different name becaulse makeLine(4 double values) already exists
*/
public static LineString makeLineFromDirection(double x, double y, double length, double angleInRadians) {
return makeLine(new Coordinate(x, y), length, angleInRadians);
}

public static LineString makeLine(Coordinate start, double length, Double angleInRadians) {
val endX = start.x + length * Math.cos(angleInRadians);
val endY = start.y + length * Math.sin(angleInRadians);

return GeometryUtils.makeLine(start, new Coordinate(endX, endY));
}

public static LineString makeLine(Coordinate... coordinates) {
if (coordinates.length == 0) {
return GeometryUtils.geometryFactory.createLineString();
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/ru/itmo/idu/geometry/GeometryUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,16 @@ public void testMakeLineWorksWith3DLines() {
assertEquals(200.0, ls.getCoordinates()[1].z);
}

@Test
public void testMakeLineDirection() {
LineString ls = GeometryUtils.makeLineFromDirection(0.0, 0.0, 1.0, Math.PI / 4.0);
assertEquals(new Coordinate(0.0, 0.0), ls.getStartPoint().getCoordinate());
final Coordinate expectedEnd = new Coordinate(1.0 / Math.sqrt(2), 1.0 / Math.sqrt(2));
assertEquals(expectedEnd.x, ls.getEndPoint().getCoordinate().x, 0.0001);
assertEquals(expectedEnd.y, ls.getEndPoint().getCoordinate().y, 0.0001);
assertEquals(1.0, ls.getLength(), 0.001);
}

@Test
public void testFlattenGeometry() {
List<Geometry> rz = GeometryUtils.flattenGeometry(null);
Expand Down

0 comments on commit bec29c2

Please sign in to comment.