Sarge
Sarge

Reputation: 2366

Determining if a spherical triangle is obtuse

Given two points, A and B, defined by longitude and latitude I want to determine if another point C is ~between~ A and B. ~between~ is hard for me to define. I don't mean on the line - it almost certainly won't be.

Geometric diagram http://www.freeimagehosting.net/uploads/b5c5ebf480.jpg

In this diagram, point C is ~between~ A and B because it is between the normals of points A and B and the line between them (normals denoted by thin line). Point D is not ~between~ A and B but it is ~between~ B and F.

Another way of saying this is that I want to determine if the triangles ABC and ABD are obtuse or not.

Note that the points will be very close together - within 10s of metres normally.

I'm thinking that the law of haversines may help but I don't know what the inverse of haversine is.

Many thanks for all help.

Upvotes: 1

Views: 490

Answers (2)

Pavel Radzivilovsky
Pavel Radzivilovsky

Reputation: 19104

First, start with translating your points to local tangent plane. We will use the fact that your triangles are much smaller than the earth's radius. (Tangent space is such that equal deltas in each of the two coordinates correspond to equal distances)

This is done by dividing longtitudes by sin(lat):

A_local_x = A_lat_rads;
A_local_y = A_lon_rads/sin(A_lat_rads);

Then,

Compute lengths:

double ABsquared = (A_local_x - B_local_x)*(A_local_x - B_local_x) + (A_local_y - B_local_y)*(A_local_y - B_local_y);
double BCsquared = ..., ACsquared.

Finally:

bool obtuse = (ABsquared+BCsquared < ACsquared) || (ABsquared+ACsquared < BCsquared); 

Obtuse means "it is not within the line", as you say. I am not checking whether triangle ABC is obtuse, but whether the angles at B and at A are obtuse. That's it.

note: I haven't tested this code. Please tell me how it works by plugging different points, if there's a bug I will fix it.

Upvotes: 3

Alok Singhal
Alok Singhal

Reputation: 96241

If your points are very close—10s of meters could easily qualify—you may be able to approximate it as a 2-d problem, and just calculate the angles CAB, θ and CBA, φ (using dot product). If both θ and φ are less than π/2, you C is "between".

cos(θ) = (AC · AB) / (|AC| |AB|)

If that approximation isn't good enough for you, you will need spherical trigonometry, which is also not too hard.

Note that if I understood your problem correctly, you need to check if the angles CAB and CBA are acute, not that the angle ACB is obtuse or acute.

Upvotes: 3

Related Questions