How to create vector within triangle plane, from perpendiculor vector3

Hi,
I’ve been working with Unity for a few months, but now I’m stuck - beginners Unity books don’t include math primers ;)… I would like to know how to find a Vector3 position (p1) within a triangle in 3D space and I also need to know the distance from a point (p0) to the new point (p1). The new Vector3 needs to be created from a right angle between the triangle and p0 (perpendicular to the triangle). I’d also rather avoid RayCasting as I think that would be overkill and this operation needs to happen often. Note: There is 100% certainty that p0 is perpendicular to the triangle’s underside.

I’m guessing the solution involves using the Vector3.Distance function at the end, but first calculating angles between some of the original vectors - which I can do using this but then I’m clueless. I’ve attached a picture of what I am trying to achieve.alt text

Description and example code snippet would be much appreciated. Natural English explanation is preferable as my Greek is terrible. Alternatively (I’ve read asking for code is bad…?) if there’s a link to a similar post, or simply a broken down list of things I need to do, where I can search more informed, then that would be great, but I have searched on several math sites, programming sites and unity without any luck - I’ve been googling for hours :frowning: made worse as I’m not sure what I’m looking for :wink: ANY Help would be much appreciated, please.

PS - my first post, so if I’ve broken protocol somehow, please let me know. Thanks

Given the diagram, the calculation is just ProjectPontOnPlane() availabe in Math3D. The solution in Mathf3D is a bit ‘wordy’ with an unnecessary function call or two. Here is a single function version:

function ProjectPointOnPlane(planeNormal : Vector3 , planePoint : Vector3 , point : Vector3 ) : Vector3 {
	planeNormal.Normalize();
	var distance = -Vector3.Dot(planeNormal.normalized, (point - planePoint));
	return point + planeNormal * distance;
}

Once you have p1 you can do this to get the distance:

var dist = Vector3.Distance(p0, p1);

Or if you look at the code I posted above, ‘distance’ in that code is the distance you are looking for. So if you pull the code out of function form and use it inline, you have the distance. Note it is the signed distance.