# Height of a 3D triangle

This topic is 2070 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Let's say I have two triangles in a 3D space

The triangles are, of course, made from 3 coordinates (each coordinate an X/Y/Z set)

First Triangle:

X1 = 0, Y1 = 0, Z1 = Dynamic

X2 = 1, Y2 = 0, Z2 = Dynamic

X3 = 1, Y3 = 1, Z3 = Dynamic

Second Triangle:

X1 = 0, Y1 = 0, Z1 = Dynamic

X2 = 1, Y2 = 1, Z2 = Dynamic

X3 = 1, Y3 = 0, Z3 = Dynamic

... So, basically, a square that's cut through the middle (and bends on that cut)

Each Z value for each is known, but varies from instance to instance. And they vary independently.

If I have a position (Say, X=0.13,Y=0.73)

How would I calculcate what the Z of the triangle will be at that position?

(I'm hoping for an equation or pseudocode that will calculate the value without using raytracing or any expensive functions like that)

Edited by mcmonkey

##### Share on other sites
If the two triangles always lie on the same plane then you can calculate the plane the triangles lay on.

The equation for a plane is
Ax + By + Cz + D = 0;

<A, B, C> is the normal of the plane and D is the closest distance of the plane to the origin divided by the length of the normal. To calculate a plane from a triangle.

// the A, B, and C of the plane
normal = cross(P2 - P1, P3 - P1)
d = -dot(P1, normal) // you can dot the normal with any of the points in the triangle, it will yield the same d

where cross() is the cross product, dot() is the product, and Pn is a point on the triangle

Then use the equation of the plane to solve for x, y, or z when you have the other two. For example, to solve for z
Ax + By + Cz + D = 0
Cz = -Ax - By - D
z = -(Ax + By + D) / C

This will find the point on the same plane the point can lie on the outside of the triangles, so you will have to make sure you point lies inside the triangle. If you need help with that I can post a method for that, I just don't want to crowd up this post if you already have a way to do that.

This actually is the basics of how a ray tracer works. Casting an individual ray is actually quite fast. Ray tracing entire images however is costly because there are many rays being cast per pixel. Some rays are used to calculate shadows, others reflections, and other such things and the scenes are usually fairly complex. You should be able to cast dozens of rays in a simpler scene and still maintain a responsive frame rate. So unless you find your game isn't running fast enough and you have identified your "ray casting" as the bottleneck, I wouldn't spend much time making sure it is fast. Edited by HappyCoder

##### Share on other sites

Two edges of a given triangle span the plane containing that triangle. So you could try looking at what you want to calculate as a linear combination of these basis vectors and solve it that way. Because of the particular X, Y components of your triangle vertices, this might actually be cheap: b(1,1) - b(1,0) + a(1,0) = (a,b).

Another way is to compute the plane equation: Ax + By + Cz = D and then solve for z.

The (X, Y) you gave is in either of the spanned planes, but not on either triangle, since it has a large Y component. I'm not sure if that was intentional.

1. 1
Rutin
37
2. 2
3. 3
4. 4
5. 5

• 12
• 10
• 13
• 104
• 11
• ### Forum Statistics

• Total Topics
632982
• Total Posts
3009689
• ### Who's Online (See full list)

There are no registered users currently online

×