Kopfknoten, Radius im Programm für verschiedene Bildschirmauflösungen

  • Zur Visualisierung versuche ich mich gerade daran einen Radius mittels GDI+ zu erstellen.
    Dank der Beispiel hier im Forum funktioniert das auch schon prima :)

    Jetzt raucht mit aber der Kopf bei der Überlegung wie ich den Radius in den unterschiedlichen Screenauflösungen realisieren kann.
    Da das Programm sich der Bildschirmgröße des Benutzers anpasst, fällt ein extra Fenster mit fest definierter Größe weg.

    Ich denke man kann sich da eine Formel errechnen und braucht so nicht für jede eventuelle Auflösung die Funktion extra schreiben.
    Die Frage ist wie berechnet man so eine Formel ?

    Habe nun alles soweit auf meine Bildschirmauflösung eingestellt, der angezeigte Radius stimmt aber nicht mehr wenn ich die Bildschirmauflösung vergrößere/verkleinere.

    Erstellt wird der zentrierte Radius anhand der Programmauflösung mittels WinGetPos und dann x/2 und y/2.
    Der Radius wird durch Usereingabe erstellt.

    [autoit]

    $Circle_Size=$CircleRadiusSize*56

    [/autoit]


    Wobei hier $CircleRadiusSize die Userineingabe ist, z.B. 12 (für Meter) und *56 auf eine Bildschirmauflösung von 800x600 passend zu einer Karte eingestellt ist.
    WinGetPos ergibt bei der Auflösung dann x=816 und y=638
    Dank Bugfix Beispiel _GDIPlus_GraphicsDrawCircleByCentre sieht das perfekt aus und der Radius passt perfekt zur Karte :)

    Also müsste ich doch nun eine Formel erstellen, die je nach Bildschirmauflösung die *56 anpasst, oder ?

    Ich vermute mal, mittels x/y zeichne ich mir eine Fläche auf Papier und unterteile die in Raster, passend zu dem Metern auf der Karte.
    Dann schaue ich wie ich mit 12x56 auf den angezeigten Radius komme.
    Ich denke nach dem ganzen Geschreibe raucht euch auch der Kopf :(

    Irgendwie bin ich da gerade auf dem Holzweg oder denke falsch.
    Wie berechnet ihr den so etwas, oder erstellt ihr das für jede Auflösung ?

    2 Mal editiert, zuletzt von JaneDoe (22. November 2012 um 13:10)

  • Ich denke nach dem ganzen Geschreibe raucht euch auch der Kopf :(

    Bilder sagen manchmal mehr als tausend Worte. Unter deinem Text kann man sich alles Mögliche vorstellen. Ich habs zumindestens nicht kapiert was du nun eigentlich für eine GUI hast, wie es derzeit realisiert ist und was zukünftig besser sein soll. Ein abgespeckter Quellcode der das Problem veranschaulicht und einem die Möglichkeit gibt eine Lösung zu testen wäre auch nicht verkehrt.

    Aber mal rein mathematisch betrachtet:

    Du willst, dass sich ein Kreis proportional zur GUI Größe vergrößert oder verkleinert.
    Du hast einen Referenzwert für den Radius bei einer fixen GUI Auflösung. Wenn du die GUI nun mit gleich bleibendem Seitenverhältnis vergrößerst oder verkleinerst, dann gilt:

    $radiusNEU / radiusALT = GUI_BreiteNEU / GUI_BreiteALT

    daraus folgt: $radiusNEU = (GUI_BreiteNEU / GUI_BreiteALT) * $radiusALT

    Vielleicht hilft dir der Ansatz ja. ;)

    EDIT:

    Da der Kreismittelpunkt vermutlich fixe x und y Koordinaten hat muss dieser vermutlich noch um die Hälfte der GUI Verbreiterung nach rechts verschoben und um die Hälfte der GUI Erhöhung nach unten verschoben werden.

    Einmal editiert, zuletzt von misterspeed (22. November 2012 um 18:29)

  • Hi misterspeed,
    danke für deine Antwort.

    Im Prinzip möchte ich so etwas machen:
    [Blockierte Grafik: http://www.be-con.de/images/kunde/bilder/Blog/Radius%20gross.png]

    Man kann auf einer Karte einen Radius einstellen, fürs Geocaching.
    Da die Gui im Vollbild ist und sich auf die Bildschirmauflösung des Users anpasst, soll sich auch der Radius auf der Karte anpassen.
    Durch die unterschiedlichen Bildschirmauflösungen bleibt der Kreis aber auf seiner festen Größe und mir ging es darum, diesen auf jede mögliche Auflösung mittels einer Berechnung anzuzeigen.

    Ich werde mir deinen Ansatz dann Morgen vornehmen, bin nach der Nachtschicht nun doch zu Müde :sleeping:

  • Möglich wäre das ganze mittels Prozentuale angaben x.x

    12% sind ja bekanntlich 0.12

    Um jetzt 12% von sagen wir mal 234 zu bekommen, rechnen wir 234*0.12 = 28.08


    Vielleicht hilft dir das ja weiter :P