Abstand Punkt-Gerade(Berechnung von Höhe und Höhenfußpunkt)

  • Hi,
    so ein Glück, ich hatte das Programm ja schon fertig^^

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <Constants.au3>;Hier sind $IDYes usw. deklariert..
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    ;<AutoItScript>
    Opt('MustDeclareVars', 0) ;0=ohne, 1=erfordert Variablen-Deklaration
    Const $ScriptType='GUI' ; Steht hier Console oder nur c erkennt Msg() daß es ein CUI.Programm ist..
    ;+----------------------------------------------------------------------------+
    ;| Header: Bestimmen der Übergabeparameter |
    ;| ( Alles Strings(!!!), bis auf $ArgC ) |
    ;| FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins |
    Const $Autor='hhfp.au3 ©2010 by ytwinky, MD'; |
    ;| EMail: [email='PIII1kSystem-AutoIt3Forum@yahoo.de'][/email] |
    ;| AutoIt3-Version: 3.3.6.1, Beta: -.-.-.- |
    ;| Editor: SciTE 1.79d, feste Schriftart |
    ;| Zweck : Schablone für den Anfang, nach Bedarf anpassen |
    ;| Tab auf 2 setzen wg. Lesbarkeit |
    ;+----------------------------------------------------------------------------+
    Const $Bewertung[2]=[' nicht', ''], $rot=0xFF0000, $gruen=0x008F00, $Farben[2]=[$rot, $gruen]
    Global $Epsilon=0.001, $nk='s', $fmt='%' &$nk
    Dim $ar=60, $ah=10, $br=10, $bh=10, $cr=35, $ch=35, $p, $q, $h, $hp, $s, $sab
    ;h=hp=25, p=q=25
    ;(Be-)Rechnen wir's doch nach..

    [/autoit] [autoit][/autoit] [autoit]

    ;<AutoItFunctions>#include <ButtonConstants.au3>
    #Region ### START Koda GUI section ### Form=D:\Sprachen\AutoIt3\Au3\kxf\hhfp.kxf
    $hhfp=GUICreate('hhfp', 573, 667, 189, 111)
    GUICtrlCreateGroup('', 0, -4, 571, 669);Main
    GUICtrlCreateLabel('Berechnung von Höhe und Höhenfußpunkt in einem Dreieck', 6, 10, 560, 26)
    GUICtrlSetFont(-1, 14, 800, 0, 'Arial')
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlSetTip(-1, $Autor)
    GUICtrlCreateLabel('(Überprüfung, ob ein Punkt auf einer gegebenen Geraden liegt..)', 84, 38, 382, 20)
    GUICtrlSetFont(-1, 10, 400, 0, 'MS Sans Serif')
    $Skizze=GUICtrlCreatePic('G:\Grafik\hhfp_Skizze.gif', 116, 58, 344, 145)
    GUICtrlCreateGroup('gegebene Gerade', 6, 204, 559, 89)
    GUICtrlCreateLabel('Rechtswert', 176, 221, 58, 17)
    GUICtrlCreateLabel('Hochwert', 324, 221, 50, 17)
    GUICtrlCreateLabel('Punkt A', 87, 243, 42, 17)
    $efar=GUICtrlCreateInput('10', 152, 240, 141, 21)
    $efah=GUICtrlCreateInput('10', 296, 240, 141, 21)
    GUICtrlCreateLabel('Punkt B', 86, 267, 42, 17)
    $efbr=GUICtrlCreateInput('60', 152, 264, 141, 21)
    $efbh=GUICtrlCreateInput('10', 296, 264, 141, 21)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('zu untersuchender Punkt', 6, 294, 559, 91)
    GUICtrlCreateLabel('Rechtswert', 176, 311, 58, 17)
    GUICtrlCreateLabel('Hochwert', 324, 311, 50, 17)
    GUICtrlCreateLabel('Punkt C', 86, 333, 42, 17)
    $efcr=GUICtrlCreateInput('35', 152, 330, 141, 21)
    $efch=GUICtrlCreateInput('35', 296, 330, 141, 21)
    GUICtrlCreateLabel('erlaubte Abweichung', 24, 357, 104, 17)
    $eferlaubt=GUICtrlCreateInput($Epsilon, 152, 354, 141, 21)
    $lblBewertung=GUICtrlCreateLabel('', 298, 356, 250, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('berechnet', 6, 387, 559, 225)
    GUICtrlCreateEdit('', 12, 410, 133, 97, $ES_READONLY, 0)
    GUICtrlSetData(-1, StringFormat('Berechnete Werte haben\r\ndie selbe Einheit, wie die\r\neingegebenen Koordinaten\r\n(also auch die Proben..)'))
    GUICtrlCreateGroup('', 152, 396, 407, 117)
    GUICtrlCreateLabel('c', 272, 410, 10, 17)
    $efsab=GUICtrlCreateInput('', 296, 407, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel('p', 272, 435, 10, 17)
    $efp=GUICtrlCreateInput('', 296, 432, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel('q', 272, 460, 10, 17)
    $efq=GUICtrlCreateInput('', 296, 457, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel('h', 272, 487, 39, 17)
    $efh=GUICtrlCreateInput('', 296, 484, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('Berechnungsproben', 10, 513, 549, 95)
    GUICtrlCreateLabel('Differenzen(erlaubt=0)', 302, 531, 108, 17)
    GUICtrlCreateLabel('c=p+q', 116, 556, 34, 17)
    $efc=GUICtrlCreateInput('', 156, 553, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlSetTip(-1, '=Strecke von A nach B(Soll)')
    $efDiffSab=GUICtrlCreateInput('', 300, 553, 141, 21)
    GUICtrlCreateLabel("h'", 136, 581, 18, 17)
    $efhp=GUICtrlCreateInput('', 156, 578, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    $efDiffh=GUICtrlCreateInput('', 300, 578, 141, 21)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('', 6, 614, 559, 41) ;bedienfeld
    $cmbnk=GUICtrlCreateCombo('Nachkommastellen(default=0)', 12, 626, 163, 25)
    GUICtrlSetData(-1, '1|3|5|7|E-Format|*')
    $btnBerechnen=GUICtrlCreateButton('Berechnen', 261, 625, 75, 25, $WS_GROUP)
    GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
    $btnQuit=GUICtrlCreateButton('Quit', 484, 625, 75, 25, $WS_GROUP)
    GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup('', -99, -99, 1, 1) ;Main
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $btnQuit
    Exit
    Case $efar, $efah, $efbr, $efbh, $efcr, $efch, $eferlaubt
    DisplayClear()
    Case $cmbnk
    $nk=GUICtrlRead($cmbnk)
    Switch StringLower(StringLeft($nk, 1))
    Case 'n', '*'
    $fmt='%s'
    Case '1'
    $fmt='%.1f'
    Case '3'
    $fmt='%.3f'
    Case '5'
    $fmt='%.5f'
    Case '7'
    $fmt='%.7f'
    Case 'e'
    $fmt='%.14e'
    Case '*'
    $fmt=''
    EndSwitch
    DisplayNk()
    Case $btnBerechnen
    $ar=GUICtrlRead($efar)
    $ah=GUICtrlRead($efah)
    $br=GUICtrlRead($efbr)
    $bh=GUICtrlRead($efbh)
    $cr=GUICtrlRead($efcr)
    $ch=GUICtrlRead($efch)
    $h=HHFP($ar, $ah, $br, $bh, $cr, $ch, $p, $q, $hp, $sab)
    $h=HHFP($ar, $ah, $br, $bh, $cr, $ch, $p, $q, $hp, $sab)
    DisplayNk()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func HHFP($ARechts, $AHoch, $BRechts, $BHoch, $CRechts, $CHoch, byRef $p, byRef $q, byRef $hp, byRef $ab)
    Local $bc=Sqrt(($BRechts-$CRechts)^2+($BHoch-$CHoch)^2), $ac=Sqrt(($ARechts-$CRechts)^2+($AHoch-$CHoch)^2)
    $ab=Sqrt(($ARechts-$BRechts)^2+($AHoch-$BHoch)^2)
    $p=($ab*$ab+$ac*$ac-$bc*$bc)/(2*$ab)
    $q=($ab*$ab+$bc*$bc-$ac*$ac)/(2*$ab)
    $h=Sqrt($bc*$bc-$q*$q)
    $hp=Sqrt($ac*$ac-$p*$p)
    Return $h
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func DisplayNk()
    Local $i=$h=0
    If Not $i Then $i=Abs($h)<=GUICtrlRead($eferlaubt); $h ist<>0, prüfen, ob Abweichung erlaubt..
    GUICtrlSetData($efsab, StringFormat($fmt, $sab))
    GUICtrlSetData($efp, StringFormat($fmt, $p))
    GUICtrlSetData($efq, StringFormat($fmt, $q))
    GUICtrlSetData($efh, StringFormat($fmt, $h))
    GUICtrlSetData($efc, StringFormat($fmt, $p+$q))
    GUICtrlSetData($efDiffSab, StringFormat('%g', $sab-$p-$q))
    GUICtrlSetData($efhp, StringFormat($fmt, $hp))
    GUICtrlSetData($efDiffh, StringFormat('%g', $h-$hp))
    GUICtrlSetData($lblBewertung, 'Punkt C liegt' &$Bewertung[$i] &' auf der Geraden AB')
    GUICtrlSetColor($lblBewertung, $Farben[$i])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func DisplayClear()
    GUICtrlSetData($efsab, '')
    GUICtrlSetData($efp, '')
    GUICtrlSetData($efq, '')
    GUICtrlSetData($efh, '')
    GUICtrlSetData($efc, '')
    GUICtrlSetData($efDiffSab, '')
    GUICtrlSetData($efhp, '')
    GUICtrlSetData($efDiffh, '')
    GUICtrlSetData($lblBewertung, '')
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Msg($What, $Title=$Autor, $Icons=0, $ErrLevel=0)
    Local $RetWert
    Switch StringLower($ScriptType)
    Case 'c', 'console', 'cui'
    ConsoleWrite($Title &@CrLf &$What)
    $RetWert=0
    Case Else
    $RetWert=MsgBox($Icons, $Title, $What)
    EndSwitch
    If $ErrLevel Then Exit $ErrLevel
    Return $RetWert
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;</AutoItScript>

    [/autoit]


    Viel Spaß damit..
    Gruß
    ytwinky