I'm working on some artificial intelligence, and I want to be able for my AI not to run into given coordinates as these are references of a wall/boundary.
To begin with, every time my AI hits a wall, it makes a reference to that position (x, y). When it hits the same wall three times, it uses linear check points to 'imagine' there is a wall going through these coordinates.
I want to now prevent my AI from going into that wall again.
To detect if my coordinates make a straight line, I use:
private boolean collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
This returns true is the given points are linear to one another.
So my problems are:
How do I determine whether my robot is approaching the wall from its current trajectory?
Instead of Java 'imagining' there's a line from 1, to 3. But to 'imagine' a line all the way through these linear coordinantes, until infinity (or close).
I have a feeling this is going to require some confusing trigonometry?
For #2, you could check if the slope between any point and one point on the wall/line you want, is the same as the slope between two points on the line.
private boolean onWall(double x, double y, double wallX1, double wallY1, double wallX2, double wallY2) {
return (wallY1 - y) / (wallX1 - x) == (wallY2 - wallY1) / (wallX2 / wallX1);
}
So, the slopes calculated share a point, so if they're the same, they're all on the same line.