Mittelpunkt eines Dreiecks finden?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

walski

Ehemaliger Admin

BeitragDi, Dez 14, 2004 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich improvisiere mal etwas, also kann gut sein, dass ich Fehler mache oder mein Ansatz unnötig kompliziert ist:

Satz von Heron:

s = Halber Umfang = ( a + b + c ) / 2

Kein Ahnung von wem:

p = Inkreisradius = sqr( ( s - a ) * ( s - b ) * ( s - c ) / 2 )

Sodele, jetzt wäre irgendwie ein Winkel ganz nett:

Du hast ja drei Punkte, nennen wir sie A,B und C

(alpha) sei der Winkel an A

Jetzt basteln wir mal schnell zwei Vektoren und zwar zu den Geraden AB und AC mit jeweils A als Orts- oder Stützvektor.

Die beiden Vektoren nennen wir vB und vC.

Ax = x-Koordinate des Punktes A
Ay = y-Koordinate des Punktes A
usw...

vB = ( Ax - Bx | Ay - By )
vC = ( Ax - Cx | Ay - Cy )


Jetzt brauchen wir den Schnittwinkel zwischen den beiden Geraden:

cos (alpha) = ( vBx * vCx + vBy * vCy ) / ( ( sqr( vBx^2 + vBy^2 ) * sqr( vCx^2 + vCy^2 ) )

(alpha) = cos^-1 (alpha)

soooo, jetzt haben wir eigentlich schon fast alles Smile

Eigentlich bräuchten wir jetzt nurnoch die Länge der Strecke, von A bis zum Schnittpunkt der Winkelhalbierenden an A und der Strecke BC...

Das ist jetzt aber in der Tat schon wieder recht kompliziert und wenn man auf Schnittpunktberechnung nicht so steht dann googelt man eben etwas Smile

Der theoretisch saubere Weg meine Lösung zu Ende zu denken wäre jetzt eben die besagte Länge zu finden und dann von A mit dem Winkel (alpha) in BesagteLänge - p Schritten zu wandern und TADA der Mittelpunkt des Inkreises...

Naja, da ich aber irgendwie selber gerade überfragt bin wenn es um ne schöne Lösung dieser Länge geht nehme ich einfach eine Lösung von:

http://www.zum.de/Faecher/Mate...ck3_2.html

Danach ist s die Länge eben besagter Strecke. Nennen wir dieses s mal aus Kompatibilität zu unserem anderen s, u.
So, viel interessanter ist aber m, denn dies ist genau das, was ich mit u - p ausrechnen würde und wenn ich diese Seite da richtig deute braucht man dann den ganzen Quatsch da oben gar nicht Very Happy

Also:

m = ( b * sqr ( a^2 - ( 2 * a * b ) + ( 4 * ( b ^ 2 ) ) ) ) / ( a + ( 2 * b ) )

Und jetzt sollte man den gesuchten Mittelpunkt mit:

Mx = Ax + cos (alpha) * m
My = Ay + cos (alpha) * m

finden.

Hier das ganze mal für BB umgestellt:

BlitzBasic: [AUSKLAPPEN]

; Speicherung des Cosinus des Winkels
Local cosalpha#

; Dreieckspunkte
Local Ax,Ay
Local Bx,By
Local Cx,Cy

; Vektoren BA und CA
Local vBx,vBy
Local vCx,vCy

; Hier Punkte eintragen:
;...

vBx = Ax - Bx
vBy = Ay - By )
vCx = Ax - Cx
vCy = Ay - Cy

; cosinus von alpha
cosalpha = ( vBx * vCx + vBy * vCy ) / ( ( Sqr( vBx^2 + vBy^2 ) * Sqr( vCx^2 + vCy^2 ) )

; m
m = ( b * Sqr ( a^2 - ( 2 * a * b ) + ( 4 * ( b ^ 2 ) ) ) ) / ( a + ( 2 * b ) )

; der gesuchte Mittelpunkt

My = Ay + cosalpha * m
My = Ay + Sqr( 1 - cosalpha ^ 2 ) * m


Joa, ich hoffe mir ist kein allzu großer faux pas passiert und wünsche viel Spaß damit.

walski
buh!
 

walski

Ehemaliger Admin

BeitragDi, Dez 14, 2004 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich bin inzwischen von der Arbeit wieder zu hause und kann berichten, das das ziemlicher Mist ist, da oben.

Aber hier ist mal ein Beispiel

BlitzBasic: [AUSKLAPPEN]

; Speicherung des Cosinus des Winkels
Local cosalpha#

; Dreieckspunkte
Local Ax,Ay
Local Bx,By
Local Cx,Cy

; Vektoren BA und CA
Local vBx#,vBy#
Local vCx#,vCy#

; m
Local m#

; Mittelpunkt
Local Mx#
Local My#

; Längen
Local a#
Local b#
Local c#

; Hier Punkte eintragen:
;...

Ax = 0
Ay = 0
Bx = 200
By = 100
Cx = 0
Cy = 200

a = Sqr ( ( Cx - Bx ) ^ 2 + ( Cy - By ) ^ 2 )
b = Sqr ( ( Ax - Cx ) ^ 2 + ( Ay - Cy ) ^ 2 )
c = Sqr ( ( Ax - Bx ) ^ 2 + ( Ay - By ) ^ 2 )


vBx = Ax - Bx
vBy = Ay - By
vCx = Ax - Cx
vCy = Ay - Cy

; cosinus von alpha
cosalpha = ( vBx * vCx + vBy * vCy ) / ( Sqr( vBx^2 + vBy^2 ) * Sqr( vCx^2 + vCy^2 ) )

; m
m = ( b * Sqr ( a^2 - ( 2 * a * b ) + ( 4 * ( b ^ 2 ) ) ) ) / ( a + ( 2 * b ) )

; der gesuchte Mittelpunkt

Mx = Ax + cosalpha * m
My = Ay + Sqr( 1 - cosalpha ^ 2 ) * m


Graphics 800,600,32,2

Line 400 + Ax,300 - Ay,400 + Bx,300 - By

Line 400 + Cx,300 - Cy,400 + Ax,300 - Ay

Line 400 + Cx,300 - Cy,400 + Bx,300 - By


Plot 400 + Mx,300 - My

Text 0,0,Mx
Text 0,20,My
Text 0,40,cosalpha
Text 0,60,m
WaitKey()


Oben waren ZIEMLICH viele Fehler drin, da ich einfach keinen Compiler hatte um fehlende Klammern etc zu finden und mir das per Hand zu mühselig war.

Das Beispiel oben funktioniert so halb, aber sobald man B kleiner macht kommt da gar nichts mehr hin.... naja, ich überleg mir nochmal was falsch ist, eventuell fehlen da einfach irgendwo Betragsstriche oder ähnliches.

walski
buh!

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group