Hello Everyone,
I have an issue here, its related to math but some hints are appretiated.
The player has to position 3d models on a sphere which is the globe.
For example a building… and after plotting I have to display the distance between his poltted position and the accurate position.
I am getting the player chosen point by a raycast, so on mouse down the model will be plotted and I save have the hit point and the other point is defined by me.
I have positioned small sphere’s at the accurate position, so the position of these sphere’s have to be compared to the hit point(position) to get the distance(arc distance)
I think to get the arc distance I need a third point which is the center of the sphere(globe) and hence I can get the radus, since the hit point and the original position is the on surface of the globe.
I really appretiate any help!
Using the center point sounds right. Run a “spoke” from the center to one point; find the angle to the other; you know 360 degrees is a distance of 2xPIxR; find the percent. Untested:
Vector3 spokeToActual = playerPos-sphereCenter,
spokeToCorrect = correctPos-sphereCenter;
float angleFromCenter = Vector3.Angle(spokeToActual, spokeToCorrect);
// NOTE: angle inputs don't need normalize. In degrees(!!)
float D = 2*Mathf.PI*radius * (angleFromCenter/360);
As a check, print that along with playerPos-correctPos).magnitude
. It should only be a little bit bigger, if the player is remotely close.
Wolfram-Alpha defines great-circle spherical distance as the arcosine of the dot product of the two coordinates:
float SphericalDistance(Vector3 position1, Vector3 position2)
{
return Mathf.Acos(Vector3.Dot(position1, position2));
}
Hi, I think that you need to compute great circle distance: