Jump to content

  • Log In with Google      Sign In   
  • Create Account


How do I put a plane on a sphere


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 Hawkblood   Members   -  Reputation: 723

Like
0Likes
Like

Posted 23 February 2013 - 02:00 AM

I need some math help. The image may help you understand what I want. Basically, I want to be able to show a plane anywhere on the surface of a sphere. I have tried some methods, but I can't seem to get them to come out right. It is probably simple, but I can't get my head around it. The orientation of the plane needs to be such that "up" is always pointing toward the "north pole" of the sphere. Any ideas?

Attached Thumbnails

  • Untitled.png


Sponsor:

#2 EWClay   Members   -  Reputation: 659

Like
1Likes
Like

Posted 23 February 2013 - 02:45 AM

What do you want, a plane equation or a set of axes to position an object?

Planes don't have an up vector, they have a normal and a distance from the origin. The normal is the normalised vector from the contact point to the centre of the sphere. The distance is the radius of the sphere minus the sphere's centre position dotted with the normal.

If you want a set of axes, you have the plane normal, as described above, and the up vector. Call the plane normal z, cross with the up vector to get x, then cross z and x to get y.

Edit: many matrix libraries have a 'Look at" function which would do the same thing.

#3 JTippetts   Moderators   -  Reputation: 8345

Like
1Likes
Like

Posted 23 February 2013 - 08:06 AM

In addition to EWClay's questions, I'd like to ask: are you trying to project the plane onto the sphere so that it wraps around, or are you just "attaching" the plane to the sphere as in your illustration?



#4 Nercury   Crossbones+   -  Reputation: 766

Like
1Likes
Like

Posted 23 February 2013 - 12:26 PM

If you make plane's pivot point the same distance from plane as sphere radius, then no matter how you rotate the plane it will always be on the sphere. If you need "up" stay the same, just don't roll the plane.

Edited by Nercury, 23 February 2013 - 12:28 PM.


#5 Hawkblood   Members   -  Reputation: 723

Like
0Likes
Like

Posted 23 February 2013 - 01:02 PM

Thank you all for posting. The ultimate goal is for this plane to actually be a terrain area on a planet. It won't be an actual plane, but that explaination got me the answers I needed.

		D3DXVECTOR3 v2(0,0,1);
		D3DXVec3TransformCoord(&v2,&v2,&SolarSystem.SolarObject[os].Objects[on].RotMat);//this is the planet's rotation matrix (its spin)
		float flong=atan2(v2.x,v2.z)+D3DX_PI/2.0f;
		if (flong>D3DX_PI*2.0f) flong-=D3DX_PI*2.0f;
		if (flong<0.0F) flong+=D3DX_PI*2.0f;//convert the transformation into an angle

		float PA=(GE->AutoPilot.Lat-90.0f)/180.0f*D3DX_PI;//the lat and lon are in degrees so I need to convert them
		float YA=(GE->AutoPilot.Lon+90.0f)/180.0f*D3DX_PI-(flong-D3DX_PI/2.0f);
		D3DXQUATERNION rot;
		D3DXQUATERNION tQ;
		D3DXQuaternionRotationYawPitchRoll(&tQ,-YA,PA,0);//using a quaternion works better
        D3DXQuaternionRotationAxis(&rot, &Camera::WORLD_XAXIS, SolarSystem.Planet[P].AxialOffset);//this is the axis offset for the planet. Not all planets have their axis straight up and down
        D3DXQuaternionMultiply(&tQ, &tQ, &rot);
		D3DXMatrixRotationQuaternion(&OM, &tQ);
		D3DXVECTOR3 v(0,0,1);
		D3DXVec3TransformCoord(&v,&v,&OM);//get the final "positional direction"
                 //multiply the vector by the radius and that gives the actual position at the sphere's surface
                 //use OM for the plane's orientation matrix

This solution works nicely.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS