You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.6 KiB
87 lines
2.6 KiB
public class Ship{
|
|
public static final int X = 0;
|
|
public static final int Y = 1;
|
|
private boolean vertical;
|
|
private int[] start;
|
|
private int[] end;
|
|
private int length;
|
|
public Ship(int[] start,int[] end){
|
|
|
|
boolean vertical = start[Y] == end[Y];
|
|
this.vertical = vertical;
|
|
int cord;
|
|
if (vertical) {
|
|
cord = X;
|
|
}
|
|
else {
|
|
cord = Y;
|
|
}
|
|
if (start[cord] < end[cord]){
|
|
this.start = start;
|
|
this.end = end;
|
|
}
|
|
else {
|
|
this.start = end;
|
|
this.end = start;
|
|
}
|
|
this.length = this.end[cord] - this.start[cord]+1;
|
|
}
|
|
|
|
public void print() {
|
|
System.out.println("Start: " + "(" + this.start[X] + ", " + this.start[Y] + ")");
|
|
System.out.println("End: " + "(" + this.end[X] + ", " + this.end[Y] + ")");
|
|
}
|
|
public int getLength() {
|
|
return this.length;
|
|
}
|
|
|
|
public boolean intersects(Ship other){
|
|
boolean cond1;
|
|
boolean cond2;
|
|
int cord1;
|
|
int cord2;
|
|
// <necessary bit, ensures algorithm works both when other is oriented horizontally or vertically>
|
|
if (other.vertical) {
|
|
cord1 = X;
|
|
cord2 = Y;
|
|
}
|
|
else {
|
|
cord1 = Y;
|
|
cord2 = X;
|
|
}
|
|
// </necessary bit>
|
|
|
|
// lines are parallel
|
|
if (this.vertical == other.vertical) {
|
|
// System.out.println("parallel");
|
|
|
|
// overlaps
|
|
cond1 = this.start[cord1] == other.start[cord1];
|
|
|
|
// intersects
|
|
cond2 = (other.start[cord2] <= this.end[cord2]) || (this.start[cord2] <= other.end[cord2]);
|
|
return cond1 && cond2;
|
|
}
|
|
// lines are perpendicular
|
|
else{
|
|
// System.out.println("perpendicular");
|
|
|
|
// other in range of this with respect to axis cord1
|
|
cond1 = (this.start[cord1] >= other.start[cord1]) && (this.end[cord1] <= other.end[cord1]);
|
|
// this in range of other with respect to axis cord2
|
|
cond2 = (other.start[cord2] >= this.start[cord2]) && (other.end[cord2] <= this.end[cord2]);
|
|
return cond1 && cond2;
|
|
}
|
|
}
|
|
public static void main(String[] args){
|
|
Ship placedShip1 = new Ship(new int[]{0,0},new int[]{0,2});
|
|
Ship placedShip2 = new Ship(new int[]{1,0},new int[]{1,3});
|
|
placedShip1.print();
|
|
placedShip2.print();
|
|
System.out.println(placedShip1.intersects(placedShip2));
|
|
System.out.println(placedShip1.getLength());
|
|
System.out.println(placedShip2.intersects(placedShip1));
|
|
System.out.println(placedShip2.getLength());
|
|
}
|
|
|
|
}
|