I do not know of any besides visibility graphs and those would still require work to setup.
You have to think in terms of how does the computer know where an obstacle is and how does it know where it can move? The object would attempt to move in a straght line to the destination but if an obstacle is in the way then what does it do? To us the answer is to simply take a path around the obstacle but computers are very stupid machines. They have no concept of how to move around an obstacle or even how to move.
Let's say I had a room that was configured like this:
Code:
|------------------------------------|
| D |
| --------| |
| | |
| | |
|-------------- ------------|
| | | |
| | |
| | | S |
|------------------------------------|
Say I wanted to find a path from S to D. How would I go about doing this? I can't just move in a straight line becuase S would cross walls on the way to D. I need to find a path through the walls that will lead me to D, but I also need to find the shortest path. Now if I was to just supply the location of the walls and say if you encounter a wall, move Right then S would move around the starting room in a constant loop.
Now a grid divides the moveable space into areas that can be marked to tell if the object has already been in that area. This allows us to find a path instead of circling around forever.
Now a visibility graph would work like this:
Code:
|------------------------------------|
| o D |
| --------| |
| o | |
| | |
|-------------- ------------|
| | | |
| | o |
| | | S |
|------------------------------------|
The nodes denote possible routes. They are placed at junctions and as long as S can find a node then it can travel to that node and then be able to see another node. We can travel to the node in the starting room and then see the node that gives us a route out of the second "room". Then once we are at this node we an see the third node that shows us the hall where D is at. From the last node we have a clear line of sight to D.
Now lets say we move D somewhere else:
Code:
|------------------------------------|
| o |
| --------| |
| o D | |
| | |
|-------------- ------------|
| | | |
| | o |
| | | S |
|------------------------------------|
We could go from the first node, to the second, and then to D. The only thing we have to check is that there is a clear path to the node or to the destination point. As a limit we could also say that the object can't visit the previous node (to prevent an object from going back and forth between two nodes).