Dreiecksmittelpunkt für Innen und Außenkreis
Übersicht

![]() |
StepTigerBetreff: Dreiecksmittelpunkt für Innen und Außenkreis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tjo, dacht mir, ich mach mal wieder einen kleinen Code.
Überlegt, nix eingefallen also mal ins Blitzprog Forum geschaut ![]() Da gings um Distanzen für einen eventuellen Treffpunkt. Erstmal rein hypotetisch. Und da dacht ich mir, mach ich mal einen Code dafür ![]() Pic dazu gibts hier. Code gibts hier: Code: [AUSKLAPPEN] Graphics 375,499,32,2
SetBuffer BackBuffer() dt=LoadImage("DT.bmp") num=0 Global x[2] Global y[2] Global rx[2] Global ry[2] Global wink[2] Global inwink[2] Global inwink1[2] Global inwink2[2] Global dist[2] While Not KeyDown(1) DrawImage dt,0,0 r=0 Color 128,164,255 For i=0 To 2 If x[i]>0 And y[i]>0 Oval x[i]-5,y[i]-5,10,10,1 r=r+1 EndIf Next If r=3 Line x[0],y[0],x[1],y[1] Line x[0],y[0],x[2],y[2] Line x[1],y[1],x[2],y[2] dist[0]=Sqr((x[0]-x[1])^2+(y[0]-y[1])^2) dist[1]=Sqr((x[0]-x[2])^2+(y[0]-y[2])^2) dist[2]=Sqr((x[1]-x[2])^2+(y[1]-y[2])^2) maxdist=0 For ya=0 To 2 If dist[ya]>maxdist Then maxdist=dist[ya] Next rx[0]=(x[0]+x[1])/2 ry[0]=(y[0]+y[1])/2 rx[1]=(x[0]+x[2])/2 ry[1]=(y[0]+y[2])/2 rx[2]=(x[2]+x[1])/2 ry[2]=(y[2]+y[1])/2 ; For ya=0 To 2 ; Oval rx[ya]-5,ry[ya]-5,10,10 ; Next wink[0]=ATan2(x[0]-x[1],y[0]-y[1]) wink[1]=ATan2(x[0]-x[2],y[0]-y[2]) wink[2]=ATan2(x[1]-x[2],y[1]-y[2]) For ya=0 To 2 tx=rx[ya] ty=ry[ya] plusx=Sin(wink[ya]+90)*200 plusy=Cos(wink[ya]+90)*200 Line tx+plusx,ty+plusy,tx-plusx,ty-plusy Next inwink1[0]=ATan2(x[0]-x[1],y[0]-y[1]) inwink2[0]=ATan2(x[0]-x[2],y[0]-y[2]) inwink1[1]=ATan2(x[1]-x[2],y[1]-y[2]) inwink2[1]=ATan2(x[1]-x[0],y[1]-y[0]) inwink1[2]=ATan2(x[2]-x[0],y[2]-y[0]) inwink2[2]=ATan2(x[2]-x[1],y[2]-y[1]) inwink[0]=inwink1[0]+Shortwink(inwink1[0],inwink2[0])/2+180 inwink[1]=inwink1[1]+Shortwink(inwink1[1],inwink2[1])/2+180 inwink[2]=inwink1[2]+Shortwink(inwink1[2],inwink2[2])/2+180 For ya=0 To 2 xplus=Sin(inwink[ya])*maxdist yplus=Cos(inwink[ya])*maxdist Line x[ya],y[ya],x[ya]+xplus,y[ya]+yplus Next EndIf Color 255,255,255 mh=MouseDown(1) If omh>0 Then mh=0:omh=omh-1 If mh=1 x[num]=MouseX() y[num]=MouseY() num=num+1 If num>2 Then num=0 omh=10 EndIf If KeyDown(2) Then num=0 If KeyDown(3) Then num=1 If KeyDown(4) Then num=2 Color 0,0,0 Text 5,0,Shortwink(inwink1[0],inwink2[0]) Text 5,15,Shortwink(inwink1[1],inwink2[1]) Text 5,30,Shortwink(inwink1[2],inwink2[2]) Color 255,255,255 Flip Cls Wend FreeImage dt End Function wrapvalue#(wert#) While wert#>=360 wert#=wert#-360 Wend While wert#<0 wert#=wert#+360 Wend Return wert# End Function Function shortwink#(wert1#,wert2#) tdist#=wert1#-wert2# If Abs(tdist#)>180 If wert1#>wert2# While wert1#>wert2# wert1#=wert1#-360 Wend Else While wert1#<wert2# wert1#=wert1#+360 Wend EndIf EndIf Return -(wert1#-wert2#) End Function Ist manchmal etwas unübersichtlich, bis man es raus hat aber sonst, ganz praktisch. Oder? |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist gut. Ich würde noch die Farben etwas umändern, damit es übersichtlicher ist. | ||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
und die schleichwerbung erst ^^
ist open source, also versuch dich ![]() |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
already done.
War nur mein Feedback ![]() Zitat: ist open source, also versuch dich Smile
tss, als ob es schwer wäre, die Stelle zu suchen, an der Color steht. ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich finds ein bischen wirr und hätte das anders gelößt . Vectoren der Orte addieren und durch die Anzahl teilen müßte einen guten Treffpunkt ergeben . Untfernung von Ort zum Treffpunkt mit dx=Ort.x-Treffpunkt.x dy=Ort.y-Treffpunkt.y Entf. Treffpunkt=sqr(dx*dx + dy*dy) |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Vectoren der Orte addieren und durch die Anzahl teilen
müßte einen guten Treffpunkt ergeben . Dann weißt du, wo der Schwerpunkt des Dreiecks liegt. Steptiger zeichnet die drei Seitenhalbierenden des Dreiecks ein, also bekommt er auch den Schwerpunkt heraus (und zwar dort wo sich die Seitenhalbierenden schneiden.) D.h. du berechnest, wo er liegt. Steptiger aber zeigt gleich noch die Hilfslinien an, was etwas mehr Code benötigt. Zitat: Untfernung von Ort zum Treffpunkt mit
dx=Ort.x-Treffpunkt.x dy=Ort.y-Treffpunkt.y Entf. Treffpunkt=sqr(dx*dx + dy*dy) [quote=Steptiger] dist[0]=Sqr((x[0]-x[1])^2+(y[0]-y[1])^2) dist[1]=Sqr((x[0]-x[2])^2+(y[0]-y[2])^2) dist[2]=Sqr((x[1]-x[2])^2+(y[1]-y[2])^2)[/quote] Das ist die Stelle, die genau dasselbe macht. Deine Lösungsvariante ist die selbe, du hast es nicht anders gelöst, allerhöchstens übersichtlicher ![]() |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
meine soll aber auf geometrischer basis existieren ![]() |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deshalb hast du ja nicht den Schwerpunkt berechnet sondern mit geometrischen Linien gefunden. | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit wirr meinte ich auch eher zu viele Linien ![]() Meine Version mal aus langeweile ![]() Naja nicht gerade ausgewohen wenn man Hanover, Leipzig,München wählt . @StepTiger wo wäre dabei bei dir der beste Treffpunkt ? Code: [AUSKLAPPEN] Graphics 375,499,32,2 SetBuffer BackBuffer() MainLoop() End Function MainLoop() Local dt=LoadImage("DT.bmp") Local tpx,tpy Local num=0,i Local x[2] Local y[2] Local dist[2] While Not KeyDown(1) Cls DrawImage dt,0,0 Color 255,255,0 ;Dreieck zeichnen Line x[0],y[0],x[1],y[1] Line x[1],y[1],x[2],y[2] Line x[2],y[2],x[0],y[0] tpx=(x[0]+x[1]+x[2])/3.0 tpy=(y[0]+y[1]+y[2])/3.0 ;Orte zum Treffpunkt Line x[0],y[0],tpx,tpy Line x[1],y[1],tpx,tpy Line x[2],y[2],tpx,tpy Punkt tpx,tpy For i=0 To 2 If x[i]>0 And y[i]>0 Punkt x[i],y[i] EndIf Next dist[0]=Sqr((x[0]-tpx)^2+(y[0]-tpy)^2) dist[1]=Sqr((x[1]-tpx)^2+(y[1]-tpy)^2) dist[2]=Sqr((x[2]-tpx)^2+(y[2]-tpy)^2) maxdist=0 For i=0 To 2 If dist[i]>maxdist Then maxdist=dist[i] Next If MouseHit(1) Then x[num]=MouseX() y[num]=MouseY() dist[num]=0 dist[num]=0 num=num+1 If num>2 Then num=0 EndIf If KeyDown(2) Then num=0 If KeyDown(3) Then num=1 If KeyDown(4) Then num=2 Color 0,0,0 Text 5, 0,"Entfernung 1 = " +dist[0] Text 5,15,"Entfernung 2 = " +dist[1] Text 5,30,"Entfernung 3 = " +dist[2] Text 5,45,"Max. Entfernung = " +maxdist Flip Wend FreeImage dt End Function Function Punkt(x,y) Color 0,0,0 Oval x-6,y-6,12,12,1 Color 255,128,64 Oval x-5,y-5,10,10,1 End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group