![]() |
Mathematikproblem: Dreieck
Hi Delphianer:hi:
Ich hab momentan ein Problem beim Programmieren. Zwar nicht bei der Implenierung, sondern bei der logik. Also folgendes: Ich habe ein spitzwinkliges Dreieck (alle innenwinkel sind kleiner als 91°) Davon sind alle 3 Seitenlängen und alle drei Winkel gegeben Wie kann ich nun Anhand dieser Größen Den Flächeninhalt berechnen? (ist kein bestimmtes Dreieck, sondern brächte eine Formel, fall eine solche existiert) Danke im Vorraus Axxus |
Re: Mathematikproblem: Dreieck
Dir stehen alle Wege offen... Recht einfach ist hier die
![]() |
Re: Mathematikproblem: Dreieck
Mit Sinus kannst doch auch ausrechnen.
|
Re: Mathematikproblem: Dreieck
|
Re: Mathematikproblem: Dreieck
Ok erst mal danke für eure schnellen Antworten
Die Ergebnisse were ich mir morgen in aller ruhe durchlesen und fals ich noch Fragen habe werde ich sie hier noch posten^^ Vll als kleine Info: Ich bin noch Kalsse 10 und wie hatten leider noch kein sinus werden wir aber wahrscheilnich im laufe des Jahres machen. Kann aber nie schaden wenn man vorher schon das weiß was behandelt wird :thumb: Gruß Axxus |
Re: Mathematikproblem: Dreieck
Hat man Trigonometrie nicht schon in der Mittelstufe?
|
Re: Mathematikproblem: Dreieck
10. Klasse = Mittelstufe ;)
|
Re: Mathematikproblem: Dreieck
Das Problem sollte doch auch mit einer Winkelhalbierenden und dem Satz des Herrn Pythagoras
zu erschlagen sein. Durch die Winkelhalbierende bekomme ich ein rechwinkliges Dreieck, dessen Fläche ist halb so groß wie das ursprüngliche. Grüße Klaus |
Re: Mathematikproblem: Dreieck
Zitat:
|
Re: Mathematikproblem: Dreieck
Ich glaube, er meint die Höhe.
|
Re: Mathematikproblem: Dreieck
Zitat:
|
Re: Mathematikproblem: Dreieck
Zitat:
Was ich beschrieben habe funktioniert so nur bei einem gleichschenkligen Dreieck. Grüße Klaus |
Re: Mathematikproblem: Dreieck
Die Höhe ist ja leider in meinem Programm nicht gegeben :(
Sonst wärs ja ganz einfach A = 1/2 * g * h |
Re: Mathematikproblem: Dreieck
Ich würde es, wie Appolonius schon gesagt hat, mit der Heronschen Formel machen. Nach der ist
A = sqrt( x(x-a)(x-b)(x-c) ), wobei x die Hälfte des Umfangs ist. P.S.: Ich wünsch mir LaTeX-Tags |
Re: Mathematikproblem: Dreieck
Du hast doch geschrieben das die länge aller drei Seiten bekannt sind.
Dann rechne sie zusammen teile sie durch zwei und dann kannst Du es wie ein Oquadrat ausrechnen. Oder bin Ich jetzt falsch. :gruebel: |
Re: Mathematikproblem: Dreieck
Zitat:
|
Re: Mathematikproblem: Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
Abgesehen von der Heron-Formel gäbe es noch diese nicht ganz so rechenintensive Möglichkeit:
(sqrt ist IIRC langsamer als sin) |
Re: Mathematikproblem: Dreieck
Zitat:
Da ist Intel aber ganz anderer Meinung. FSIN benötigt 160-200 Takte FSQRT benötigt 23 Takte (Single), 38 Takte (Double), 43 Takte (Extended) Ich hab das mal getestet Deine Version : f1:=Sin(alpha)*b*c/2; Eine andere Version : f2:=Sqrt(4*Sqr(a)*Sqr(b) - Sqr((Sqr(a) + Sqr(b) - Sqr(c)))) / 4; Deine Version = 344 Takte Andere Version = 292 Takte Und beides durch ASM-Funktionen optimiert Deine Version = 296 Takte Andere Version = 200 Takte Zu beachten ist noch, daß beim Test der Winkel bereits in Rad vorliegt und nicht, wie bei Aufgabenstellungen üblich, in Grad. Das bringt dann auch noch ein paar Takte auf die Waage. Und zum Nachprüfen hier die komplette Test-Prozedur :
Delphi-Quellcode:
PROCEDURE TMain.Test;
var a,b,c,alpha,f1,f2,f3,f4:extended; t0,t1,t2,t3,t4:int64; i:integer; FUNCTION TimeStamp:int64; asm rdtsc end; FUNCTION Surface1(var alpha,b,c:extended):extended; // Sinus-Version const two:integer=2; asm fld tbyte [edx] // b fld tbyte [ecx] // c fld tbyte [eax] // alpha fsin fmulp fmulp fidiv two end; FUNCTION Surface2(var a,b,c:extended):extended; // andere Version const four:integer=4; asm fld tbyte [eax] // a fmul st,st // st0=Sqr(a) fld tbyte [edx] // b fmul st,st // st0=Sqr(b), st1=Sqr(a) fld tbyte [ecx] // c fmul st,st // st0=Sqr(c), st1=Sqr(b), st2=Sqr(a) fchs // st0=-Sqr(c), st1=Sqr(b), st2=Sqr(a) fadd st,st(1) // st0=Sqr(b)-Sqr(c), st1=Sqr(b), st2=Sqr(a) fadd st,st(2) // st0=Sqr(a)+Sqr(b)-Sqr(c), st1=Sqr(b), st2=Sqr(a) fmul st,st // st0=Sqr(Sqr(a)+Sqr(b)-Sqr(c)), st1=Sqr(b), st2=Sqr(a) fxch st(2) // st0=Sqr(a), st1=Sqr(b), st2=Sqr(Sqr(a)+Sqr(b)-Sqr(c)) fimul four // st0=4*Sqr(a), st1=Sqr(b), st2=Sqr(Sqr(a)+Sqr(b)-Sqr(c)) fmulp // st0=4*Sqr(a)*Sqr(b), st1=Sqr(Sqr(a)+Sqr(b)-Sqr(c)) fsubrp // st0=4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c)) fsqrt // st0=Sqrt(4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c))) fidiv four // st0=Sqrt((4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c))))/4 end; begin a:=3; b:=4; c:=4.5; alpha:=0.71217178712617798; // Rad t1:=High(int64); t2:=High(int64); t3:=High(int64); t4:=High(int64); for i:=1 to 10 do begin // Sinus-Version t0:=Timestamp; f1:=Sin(alpha)*b*c/2; t0:=Timestamp-t0; if t0<t1 then t1:=t0; // andere Version t0:=Timestamp; f2:=Sqrt(4*Sqr(a)*Sqr(b) - Sqr((Sqr(a) + Sqr(b) - Sqr(c)))) / 4; t0:=Timestamp-t0; if t0<t2 then t2:=t0; // Sinus-Version in ASM t0:=Timestamp; f3:=Surface1(alpha,b,c); t0:=Timestamp-t0; if t0<t3 then t3:=t0; // andere Version in ASM t0:=Timestamp; f4:=Surface2(a,b,c); t0:=Timestamp-t0; if t0<t4 then t4:=t0; end; ShowMessage('F1='+FloatToStr(f1)+' Ticks='+IntToStr(t1)+' (Sinus)'#13+ 'F2='+FloatToStr(f2)+' Ticks='+IntToStr(t2)+' (andere)'#13+ 'F3='+FloatToStr(f3)+' Ticks='+IntToStr(t3)+' (Sinus ASM)'#13+ 'F4='+FloatToStr(f4)+' Ticks='+IntToStr(t4)+' (andere ASM)'); end; |
Re: Mathematikproblem: Dreieck
IIRC heißt ja auch "If I remember correctly". ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz