Contents

Inkugel eines Tetraeders

clear, clc, close all

Punkte des Tetraeders

% a = [ 0 0 0 ]; b = [ 2 0 0 ]; c = [ 0 1 0 ]; d = [ 0 0 4 ];    % spezielle Lage
a = [  9 -1 2 ]; b = [ 1 3 4 ]; c = [ -1 4 2 ]; d = [ 1 0 1 ];  % allg.

%

Normalenvektoren der 4 Tetraederflächen

Rechtsregel beachten (Normalenvektoren sollen nach Innen zeigen)
Kann zum Bsp durch Einsetzen des Tetraederschwerpunktes S
in die Formel d = N x (S -X) erzielt werden.
Falls d<0, dann ist N = -N  notwendig.
n1 = cross( b-a, c-a );   % und
n1 = n1/norm(n1);         %     normalisieren

n2 = cross( d-a, b-a );   % und
n2 = n2/norm(n2);         %     normalisieren

n3 = cross( c-a, d-a );   % und
n3 = n3/norm(n3);         %     normalisieren

n4 = cross( b-c, d-c );   % und
n4 = n4/norm(n4);         %     normalisieren

%

Herleitung und Definition of Matrix A and rechter Seite f des Gleichungssystems

zur Berechnung des Inkreismittelpunktes M und dessen Radius r Lösungsvektor u = [ M_x M_y M_z r]'

Herleitung der ersten Matrixzeile aus dem normierten Normalevektor n1 und Pkt. A:

Sei alpha = Winkel DMA (D ist unbekannter Lotpunkt auf Dreiecksflaeche)
und Radius r=|D-M| :
rechtwinkliges Dreieck ADM ==>           r =      |M-A|*cos(alpha)    (1)
Skalarprodukt              ==>  < M-A, n1> = |n1|*|M-A|*cos(alpha)    (2)
Aus (1),(2) folgt wegen |n1|=1:         r  =  < M-A, n1>
<==>  <M,n1> - r = <A,n1>   was einer Gleichung mit 4 Unbekannten
(M_x,M_y,M_z,r) entspricht.
Analog fuer B,C,D mit n2,n3,m4 entsprechend und es entsteht nachfolgendes GlS.
% Gleichunssystem, aufstellen
A = [ n1(1)  n1(2)  n1(3)  -1;
      n2(1)  n2(2)  n2(3)  -1;
      n3(1)  n3(2)  n3(3)  -1;
      n4(1)  n4(2)  n4(3)  -1; ];

f = [ dot(n1,a);  dot(n2,a);  dot(n3,a);  dot(n4,d) ];

% und das Gleichungsystem lösen
u = A\f;

%

Ergebnisausgabe

M = u(1:3);                       % die ersten 3 Komponenten der Loesung des GlS
Radius = u(4);                    % die 4. Komponenten der Loesung des GlS
disp(' '); disp('Koordinaten der 4 Eckpunkte des Tetraeders')
disp(vertcat(a,b,c,d))
disp(' '); disp(['Inkreismittelpunkt:  ', num2str(M')])
%disp(M)
disp(' '); disp(['Radius: ',num2str(Radius)])
%disp(Radius)
 
Koordinaten der 4 Eckpunkte des Tetraeders
     9    -1     2
     1     3     4
    -1     4     2
     1     0     1

 
Inkreismittelpunkt:  1.2966      2.1889      2.4117
 
Radius: 0.59281

Tetraeder visualisieren

Koordinaten
koord = horzcat(a', b', c', d');
tri = [ 1 2 3; 1 2 4; 1 3 4; 2 3 4];      % Eckpunkte der 4 Dreiecksflaechen

trisurf(tri, koord(1,:), koord(2,:), koord(3,:) )
alpha(.5)   % transparency factor
axis equal
hold
Current plot held

Kugel visualisieren

n = 2^5-1;

ellipsoid(M(1),M(2),M(3),Radius,Radius,Radius,n)
colormap hsv;
axis equal

%publish('InkugelTetraeder.m')