# Line collision?

Hi Everyone,

Using A* path finding, I can find a route between buildings, but it is not always optimal. So what I want to do is to see what is the furthest way point along my path I can directly see from my current position.

Code to generate the line and check for collision with any buildings:

[java]

// Create line from start to the end way point

Line startEnd = new Line(startPoint, endPoint);

startEnd.setLineWidth(20);

Geometry line = new Geometry(â€śStartEndâ€ť, startEnd);

line.setMaterial(matYellow);

// Attach to scene

this.wayPoints.attachChild(line);

// Check collision with buildings

List<Spatial> builds = this.buildings.getChildren();

for(int building = 0; building < builds.size(); building++)

{

Spatial buildingSpatial = builds.get(building);

CollisionResults results = new CollisionResults();

BoundingVolume bv = buildingSpatial.getWorldBound();

line.collideWith(bv, results);

System.out.println("Building Check: " + buildingSpatial.getName() + " hits: " + results.size());

if(results.size() > 0)

{

System.out.println(â€śhit a buildingâ€ť);

}

}

[/java]

So the reason why I have set the line width is that my object that I eventually want to move along the path is not going to be as small as 1px.

However, the collision results are always 0 in size.

So how can I solve this?

My though it is to use a ray, but you can specify a size of a ray. Additionally I need to specify a ray direction, how can I calculate this given a start and end vector. I have looked at the maths path in the wiki but I donâ€™t know what maths I need to use. Please help.

Here is a picture to prove the line does intersect with the buildings:

http://i.imgur.com/UBS18.png

You help is much appreciated. Mark

@randommark said:
My though it is to use a ray, but you can specify a size of a ray. Additionally I need to specify a ray direction, how can I calculate this given a start and end vector. I have looked at the maths path in the wiki but I don't know what maths I need to use. Please help.

[java]Vector3f direction = end.substract(start);[/java]
2 Likes

Most people solve this by placing the points of their navigation mesh correctly so that A* then provides the shortest routeâ€¦