Contents

Inkugel eines Tetraeders

clear,clc,clf
%

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 (hier ueber meshgrid)

k = 5;
n = 2^k-1;
%  Meshgrid in theta und phi
theta = linspace(-pi,   pi,   n  +1);        % Breitengrade
phi   = linspace(-pi/2, pi/2, n/2+1);        % Laengengrade
[ TT PP]   = meshgrid(theta,phi);            %   meshgrid erzeugen
[XX YY ZZ] = sph2cart(TT,PP,Radius);         % Kugelkoord --> kart.
XX = XX + M(1);                              % in Mittelpunkt verschieben
YY = YY + M(2);
ZZ = ZZ + M(3);

surf(XX,YY,ZZ)
colormap hsv;
axis equal

%publish('InkugelTetraeder.m')