Mathematisches Problem
Übersicht

SchoppyBetreff: Mathematisches Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
vielleicht kennt hier einer eine Lösung für mein Problem: Also ich habe ein Canvas und hier zeichne ich ein 400 x 400 Pixel Großes Bild. Per Mausklick im Canvas wird eine Linie von Oben nach unten gezeichnet, als Hilfslinie. Soweit so Gut. Jetzt wird das Bild per Mausrad gezoom sprich vergrößert. Code: [AUSKLAPPEN] Global zoom_multiplikator:Float = 100 Global image_zoom:Float = 0 image_zoom = image_zoom + 1 Damit jetzt die Linie an der Position im Image bleibt, berechne ich Code: [AUSKLAPPEN] 'berechne zuerst wert pro Pixel Local wertPixel:Float = (image_zoom * zoom_multiplikator) / ImageWidth(Image) 'jetzt berechne wert verschiebung für Line Local pos_line:Float = line_posX * wertPixel DrawLine(line_posX + pos_line, 0, line_posX + pos_line, 500) Ok, als Beispiel: line_posX_bei_zoom0 = 20 image_zoom = 1 zoom_multiplikator = 1000 wertPixel:Float = (image_zoom * zoom_multiplikator) / ImageWidth(Image) '(1 * 1000) / 400 = 2,5 pos_line:Float = line_posX_bei_zoom0 * wertPixel ' 20 * 2,5 = 50 line_pos_Neu = line_posX_bei_zoom0 + pos_line '20+50 Die Linie muss alSo bei Zoom 1x bei 70 gezeichnet werden. Das funktioniert auch Super beim rein und rausZoomen. Jetzt möchte ich aber im gezoomten Status die Linien Position korrigieren. Das heißt: line_pos_Neu erhält einen neuen wert z.b.60 Wie errechne ich jetzt line_posX_bei_zoom0 ??? Einfach aufgeschreiben: x = ? x * 2, 5 = ? x + ? = 60 |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe deinen Weg nicht ganz. Wieso rechnest du zuerst einen "Wert pro Pixel"? Und wieso hast du einmal image_zoom und einmal zoom_multiplikator? | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab grade mal n kleinen Testcode gebastelt.
Da ich deinen Weg auch nicht ganz verstehe, habe ich einfach meinen ansatz umgesetzt. Basierend auf Zoom, Bildbreite (wahlweise auch bildschirmbreite!) und MouseX() Der obere Teil ist irrelevant, der malt ein kleines Testbild. Unten in der hauptschleife wird der Zoomfaktor per Pfeilhoch / pfeil runter verändert und dann mit SetScale() gesetzt. Damit du siehst, das SetScale die linien nicht beeinflusst, setze ich sie jeden Frame neu. Ist zwar ein wenig dirty gelöst, aber es funktioniert ![]() Die Position der Hilfslinie wird mit (MouseX() / (bildBreite * zoom)) als faktor gerechnet. Hinterher, beim Zeichnen, wird die X position mit faktor*zoom*bild_breite wieder zurückgerechnet. BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Schoppy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, danke dir für die Mühe.
Es funktioniert. SetScale zu nutzen, daran habe ich garnicht gedacht. Gruß Schoppy |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group