Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch ber Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele Mathematik

Liegt Punkt C auf Gerade AB?

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 06.12.2010

Jede Strecke in einer Ebene hat einen Anfangs- und einen Endpunkt.
Das ist nichts besonders Neues, aber kann erstmal so stehenbleiben..
Nun gibt es durchaus Fälle, in denen es interessant wäre, zu wissen(!!), ob ein
weiterer Punkt(aus derselben Ebene) auch auf dieser Geraden liegt. Mein altes
Pascal-Programm habe ich umgestrickt, damit es unter FreeBasic läuft und siehe da:
es läuft ;-))
Die Proberechnungen habe ich erstmal noch im Programm belassen, sie können aber auch
ganz einfach entfernt werden..
Die Entscheidung, wann ein Punkt auf einer Geraden liegt kann der Benutzer anhand der
Höhe h treffen, wenn h=0 ist, liegen die Punkte auf einer Geraden. Da die Berechnung aber mit Doubles erfolgt, ist es unwahrscheinlich, daß exakt Null herauskommt. Hier müssen
dann Fehlergrenzen festgelegt werden..
Viel Spaß dabei
Gruß
ytwinky

'+-----------------------------------------------------------------------------------+
'|    Header: Bestimmen der bergabeparameter                                        |
'|    AnzeigeCheck:|Il1 sind Alt-0124, Groes i, kleines L, Eins ߎę֚|
Const Author="HHFP.Bas v0.221 2010 by ytwinky, MD"'                                 |
'|           (Tastenkombination: keine)                                              |
Const FBVer="Getestet mit FB " &__fb_version__ &" und dem aktuellen FBEdit"'|        |
'|    Zweck : Berechnung einer Hhe aus Koordinaten(ohne Winkelberechnungen..)       |
'+-----------------------------------------------------------------------------------+
'(Anmerkung zu den Sonderzeichen: zuerst steht das DOS-Zeichen, danach das Windowszeichen)
'A(60, 10), B(10, 10), C(35,35) =>p=25, q=25, h=25=h'
Type Real As Double
Type Punkt
    As Real r, h
End Type
Const False=0, True=Not False, Esc=!"\27"
'program hoehenfusspunkt;
Declare Sub HHFP(A As Punkt, B As Punkt, C As Punkt, byRef p As Double, byRef q As Double, byRef h As Double, byRef hp As Double)
Dim As Punkt A, B, C
Var p=0.0, q=0.0, h=0.0, hp=0.0, m="", z=5, s=18
Do
    Cls
    Print !"Berechnung von Hhe und Hhenfupunkt\n" &Author
    Locate z-1, s
    Print "C";
    Locate z, s+1
    Print "";
    Locate z+1, s
    Print "/\";
    Locate z+2, s-1
    Print "/ \";
    Locate z+3, s-3
    Print "a/  h \b";
    Locate z+4, s-3
    Print "/      \";
    Locate z+5, s-4
    Print "/ p    q \";
    Locate z+6, s-7
    Print "B A";
    Locate z+7, s+1
    Print "F";
    Locate z+8, s
    Print "-c-"
    Input "A(Rechts):", A.r
    Input "A(Hoch):", A.h
    Input "B(Rechts):", B.r
    Input "B(Hoch):", B.h
    Input "C(Rechts):", C.r
    Input "C(Hoch):", C.h
    HHFP(A, B, C, p, q, h, hp)
    Print "p=" &p
    Print "q=" &q
    Print "h=" & h &"h'(als Probe)=" & hp
    Print "Weitere Probe: c-p-q=0(Soll!!) c-p-q=" &(Sqr((A.r-B.r)^2+(A.h-B.h)^2)-p-q) &" (Ist)"
    Print "Ist h=0(oder in der Nhe davon) liegen die Punkte auf einer Geraden..)"
    Print "Darf's noch was sein?(J/N):";
    Do
        m=""
        While m="":m=UCase(InKey):Wend
    Loop Until InStr("JN" &Esc, m)
    Print m
  Loop Until m<>"J"
End

Sub HHFP(A As Punkt, B As Punkt, C As Punkt, byRef p As Double, byRef q As Double, byRef h As Double, byRef hp As Double)
    Var ab=Sqr((A.r-B.r)^2+(A.h-B.h)^2), ac=Sqr((A.r-C.r)^2+(A.h-C.h)^2), bc=Sqr((B.r-C.r)^2+(B.h-C.h)^2)
  If bc>ac Then
    p=(ab*ab+bc*bc-ac*ac)/(2*ab)
    q=ab-p
    h=Sqr(bc*bc-q*q)
    hp=(ac*ac-p*p)/h
  Else
    q=(ab*ab+ac*ac-bc*bc)/(2*ab)
    p=ab-q
    h=Sqr(ac*ac-p*p)
    hp=(bc*bc-q*q)/h
  End If
End Sub

Zustzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 06.12.2010 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 06.12.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen