空間円の法線

 三次元空間の三点の位置座標が分かれば、二つのベクトルの外積により、法線ベクトルを求めることができます。
 A点の法線ベクトルNvは、Nv=(Tp2-Tp1)×(Tp3-Tp1)

 成分で表すと、
 Nv.x=(Tp2.y-Tp1.y)*(Tp3.z-Tp1.z)-(Tp2.z-Tp1.z)*(Tp3.y-Tp1.y)
 Nv.y=(Tp2.z-Tp1.z)*(Tp3.x-Tp1.x)-(Tp2.x-Tp1.x)*(Tp3.z-Tp1.z)
 Nv.z=(Tp2.x-Tp1.x)*(Tp3.y-Tp1.y)-(Tp2.y-Tp1.y)*(Tp3.x-Tp1.x)

 B点の法線ベクトルNvは、Nv=(Tp1-Tp2)×(Tp3-Tp2)
 C点の法線ベクトルNvは、Nv=(Tp2-Tp3)×(Tp1-Tp3)

 円の中心Oの位置座標をOcとすると
 O点の法線ベクトルNvは、Nv=(Tp1-Oc)×(Tp2-Oc)
 単位法線ベクトルUnは、Un=Nv/║(Tp1-Oc)×(Tp2-Oc)║
 ║(Tp1-Oc)×(Tp2-Oc)║=sqrt(pow(Nv.x,2)+pow(Nv.y,2)+pow(Nv.z,2))です。

f:id:silver_dragon:20220112122622p:plain

平面の法線ベクトル

 A点とB点の法線ベクトルは向きが反対になっています。
 三次元コンピューターグラフィックスでは面の表と裏を区別して、法線ベクトルを同じ向きにする必要があります。

 参考までに、POV-Rayで作成した外向きの法線ベクトルを求めるマクロを載せておきます。
 //**********************************************************************************
 //入力:三次元空間の任意の三点 Tp1,Tp2,Tp3
 //出力:外向きの法線ベクトル    Vn
 //**********************************************************************************
 #macro Normal_vector(Tp1,Tp2,Tp3)
  #local Nv=vcross(Tp1-Tp2,Tp3-Tp2); 
  #if(vdot(Tp1,Nv)>0) #local Sg=1; #else #local Sg=-1; #end
  #local Vn=Sg*Nv;
  Vn
 #end
 //**********************************************************************************
 三次元空間の三点は同一平面にあるので、法線ベクトルVnは平面の法線ベクトルになります。