Hey guys, how do you calculate the angle between two surfaces? This is not the angle between the two normals, else the angle for a V and A shape (reversed-V, see below) would be the same. Thanks.
/\ \ /
/ \ /
Hey guys, how do you calculate the angle between two surfaces? This is not the angle between the two normals, else the angle for a V and A shape (reversed-V, see below) would be the same. Thanks.
/\ \ /
/ \ /
Hello,
“surfaces” you mean planes? Angle between planes is the same as angle between their normals. Look ad the picture . There is intersection line and on the left you can se V shape and on the left A shape.
If alpha is the angle between the two sufraces in V shape (or planes if you prefer), then 180+(180-alpha) is the angle between the two surfaces on the A shape. However the normal angle calculation will always return alpha for both shapes. I need to determine if the angle is closed or open, normals don’t tell that.
You want the 360 based angle between two 3D vectors. It’s not that simple but not overly complicated either.
I’m new to UE but here are some links that may be inspiring:
Based off vectors only: Deriving angles from 0 to 360 from Dot Product. - OpenGL - Khronos Forums
Based off quaternions: Getting 360 angle between two 3d vectors for Unity3D. · GitHub
Of course you’d have to do some work
Have you tried the | operator which does the dot product between two planes?
float AngleBetweenTwoPlanes(const FPlane& A, const FPlane& B)
{
return FMath::Acos(A | B); // Should be in radians, convert to degrees if needed.
}
Here’s somethingstraightforward but smelly… I don’t trust it does what it says but who knows? If you try it please let to be known if it works or not.
Thanks a lot guys! I have experimented with the various methods. The FPlane one didn’t work for me, maybe I didn’t use it properly. Finally, here is what I am doing: