Solution proposed by Sweris_Waddanders gh-code is equivalent to the code below I suggested in my previous reply:
Point3d origin = lnA.PointAt(0.5);
Vector3d BisectorN = a.Normal - b.Normal;
return new Plane(origin, BisectorN);
Another bisector plane (bP) is the one defined by bP.normal = a.Normal + b.Normal.
These two bisectorPlanes are orthogonal to each other (their Normals are orthogonal ) - see attahced images:
Some pure algebra and geometry:
If we have two vectors, c = (c1; c2; c3), d = (d1; d2; d3), then
- algebraic definition of dot product is: cd = c1d1 + c2d2 + c3d3.
- geometric definition of dot product in Euclidean space is: c*d = c.Length * d.Length * cos(Theta) where Theta is angle between c and d
If c and d are orthogonal (Theta = PI/2) then:
3) c*d = 0 because cos(Theta)=0.
So if we have unit vectors:
4) a.Normal = (a1, a2, a3)
5) b.Normal = (b1, b2, b3)
and if we define c and d as :
6) c= a.Normal + b.Normal = (a1+b1, a2+b2, a3+b3)
7) d= a.Normal - b.Normal = (a1-b1, a2-b2, a3-b3)
then c and d are orthogonal.
It is easy to prove this by calculating cd by using rule 1). We will get cd=0, this implies that cos(Theta)=0 which implies that vectors c and d are orthogonal.
And c and d are normals of our two bisectionPlanes.
If you do not have specific need for using x-plane-axis and y-plane-axis for your bisection planes you should stick with origin point and normal vector while consturcting plane becasue in this case you work only with two 3d values.
But if you need it then:
9) X-axis of both bisector planes can be VECTOR CROSS PROCDUCT of a and b normals = a.Normal x b.Normal
10) Y-axis of one bisector plane is normal axis of another bisector plane, for plane c Y-axis = d.Normal and vice versa
11) Z-axis are normals
Or maybe you will have to swittch X and Y axis to fulfill right-hand-rule of X-Y-Z orienatation.
Anyway, you have to choose/define which bisector plane you want to use - set some convention rule that you will follow all the way in your solution…