"We are back" « oc.at

g0t v0rschlag? [php]

Phobos 01.03.2003 - 23:25 570 13
Posts

Phobos

✝
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
Ich wollte mir (da wir das gerade in mathe machen ;)) einen Trigonometrie rechner basteln. Für das allgemeine dreieck (sin- / cossatz)

Ich hab mir das durchdacht, würde alles mit den mathematik funktionen die php hat funktionieren.

Allerdings bleibt noch ein dummes problem gelich am anfang: und zwar die angabe.

grundsätzlich braucht man für trigonometrie im allgemeinen dreieck 6 dinge: seite a, b, c winkel alpha, beta und gamma.

so jetzt sind die angaben meistens so das ich nur 3 werte gegeben hab: zb a, b, alpha oder b, beta, gamma usw...

und jeh nach dem welche werte gegeben sind,gibt es einen anderen rechengang. es gäbe also im ersten formular 6 felder, und jeh nach dem welche ausgefüllt werden , würde "eine" if, else abfrage den rechengang festlegen. nun das ergeben dann ca 20 abfragen und das is ma zu viel :p

eine andere möglichkeit wäre am anfang anzugeben welche werte man gegeben hat (in form von radio buttons zb) allerdings sehr benutzerunfreundlich :D

was gäbe es da für eine möglichkeit?

thx 4 hlp
:cool: pHs

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
du schreibst einfach die Berechnungen für Seite, Seite, Seite; Seite, Winkel, Seite ; Seite, Winkel, Winkel ; Winkel, Winkel Winkel, und machst davor eine auswahl (vor jedem Element)
Aber für was brauchst sowas in PHP?

Phobos

✝
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
4 phun ;)

jo des is ma auch scho durch den kopf gangen aber sin / cos satz sind je nach angabe verschieden.

auserdem kannst ein dreieck net mit 3 winkeln berechnen ;)

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
macht ja nix, musst halt entweder automatisch erkennen mit welchen angaben er welchen Satz verwenden soll, oder das ist ein weiterer Parameter

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
Neue Idee: Du machst 6 Felder, der User füllt alle ein die er weiss und vom Proggie werden dann alle anderen dazugegeben. Is schon recht aufwendig aber möglich.

Phobos

✝
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
jo, thx aber wie mach ich das :D

wenn ich des in einer if else abfrage macht is der code so umfangreich das ich alle beispiele die ich jehmals mit dem programm rechnen werd auch mit der hand rechenen könnt :p

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
hmm.. vielleicht läßt sich das in einer schleife lösen, wenn du die beziehungen zwischen den werten im dreieck auf kleinste einheiten herunterbrichst.. etwa so:

für die winkel alpha, beta und gamma und die seiten a,b und c legst du ein array (winkel[0..2], seite[0..2]) an, und führst nacheinander folgende einfachstbeziehungen im dreieck durch, solange bis alle 6 felder gefüllt wurden, oder in ein (äußerer) schleifendurchlauf keine neuen felder gefüllt werden konnten:

a/sin(al)=b/sin(be)=c/sin(ga)
a/b=sin(al)/sin(be); (für alle seiten)
al+be+ga=180
usw..

für den ersten sinussatz heißt das zb: du suchst nach einem vollständigen seiten/winkel paar und kannst dann zu jedem unvollständigen seiten/winkel paar den jeweils anderen wert berechnen.
beispiel: zb so:

Code:
$toterdurchlauf=0;
while (!$toterdurchlauf || !(alle felder gefüllt)) {
  $toterdurchlauf=1;
  // 1 sinussatz:
  // finde umkreisdurchmesser //ukd=2R:
  $ukd=0;
  for ($i=0;$i++;$i<3)
    if (isset($winkel[i])&&isset($seite[i])) {
      $ukd=$seite[i]/sin($winkel[i]);
      break;
    }
  if ($ukd) {
    for ($i=0;$i++;$i<3) {
      if (isset($winkel[i]&& !isset($seite[i]) { // seite fehlt
        $seite[i]=$ukd*sin($winkel[i]);
        $toterdurchlauf=0; // wichtig !
      }
      if (!isset($winkel[i]&& isset($seite[i]) { // winkel fehlt
        $winkel[i]=arcsin($seite[i]/$ukd);
        $toterdurchlauf=0; // wichtig !
      }
    }
  }
    
  // 2 sinunssatz:
  .. usw...

  // cosinussatz:
  ...

  // winkelsatz:
  ...

}
Bearbeitet von atrox am 02.03.2003, 15:53

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
@Phobos:
nächstes mal bitte einen sprechenderen threadtitle

Phobos

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
bitte vielmals um verzeihung her forumgott :D

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
so wie ich das sehe gibts eh nur folgende möglichkeiten der angabe:
drei seiten
zwei seiten mit eingeschlossenem winkel
zwei seiten mit winkel ausserhalb
eine seite mit beiden winkeln an den enden
eine seite mit einem winkel an einem ende und 2. gegenüber

vielleicht kann man's auch noch weiter reduzieren - is gut möglich ;)

Phobos

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
nein das sind alle möglichkeiten.

allerdings sind die formeln jedes mal anders.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Phobos
nein das sind alle möglichkeiten.

allerdings sind die formeln jedes mal anders.
naja, 5 formeln sind ja nicht die welt... :rolleyes:

Phobos

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
nicht zu vergessen sie das ich gerne hätte das er winkel alpha , beta und gamma ausgibt und net "seite 1" und "winkel gegenüber seite 1"

usw...

das hab ich schon auf meinem taschenrechner programmiert, nur ich arbeite daran das der rechengang auch ausgegeben wird :)

Sticker

Big d00d
Avatar
Registered: Mar 2003
Location: Wien
Posts: 177
kein tangens?

@ Thread

erstmal checken, wenn 3 Winkel gegeben sind und keine Seite dann gehts nicht...also, echo "berechnung nicht möglich";
dann checken was du hast und was du brauchst.
if (!empty(bla)&&!empty(blubb)&&empty(bla))
{
bla
}

Und das mit allen möglichkeiten...

Rechengang?
Sollte nicht so schwer sein, musst einfach nur in den if Anweisungen das wast rechnest noch echon ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz