In ein Koordinatensystem zoomen?

stEEdZ

Mitglied
Hallo allerseits,
ich habe für die Uni eine Aufgabe zu lösen und benötige dringend HIlfe :rolleyes:

Erst musste man ein Koordinatensystem und darin dann Punkte einzeichnen und diese mit Linien verbinden. Soweit so gut...
Bei der nächsten Aufgabenstellung hänge ich leider etwas:
Aufgabe 5
Erweitern Sie das Programm um eine Zoomfunktion, die es dem Benutzer ermöglicht - beispielsweise
durch Aufziehen eines Rechtecks - einen Teil der Grafi k herauszuzoomen!
Achten Sie dabei darauf, dass die Achsteilungen "schöne" Werte bekommen (also beispielsweise
0:1, 0:2, 0:3 bei einem gezoomten Bereich von 0:05 : : : 0:35)!

Mit einem neuen Thread und MouseEvents bekomme ich das Zeichnen des Rechtecks noch hin, aber wie der Zoom jetzt funktioniert begreife ich momentan nicht so wirklich :(.

Hier der neue Thread:
PHP:
public void run() {
            while (true) {

                Graphics g = strategy.getDrawGraphics();
                g.clearRect(0, 0, getWidth(), getHeight());
                paintComponent();

                if (p0 != null && p1 != null) {
                    
                    xScaleMin = Math.min(p0.x, p1.x);
                    xScaleMax = xScaleMin == p0.x ? p1.x : p0.x;
                    yScaleMin = Math.min(p0.y, p1.y);
                    yScaleMax = yScaleMin == p0.y ? p1.y : p0.y;
                    BasicGraphicsUtils.drawDashedRect(g, xScaleMin, yScaleMin, xScaleMax
                            - xScaleMin, yScaleMax - yScaleMin);
                }

                g.dispose();
                strategy.show();

                try {
                    sleep(30L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
        }
    };

und hier die MousEvents:
PHP:
public DrawSystem() {
        super("Möp MÖp");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        

        addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent evt) {
                p1 = evt.getPoint();
            }
        });

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                p0 = evt.getPoint();
            }
            public void mouseReleased(MouseEvent evt) {
            	
                
            
            }
        });

        setSize(400, 300);
        setVisible(true);
        createBufferStrategy(2);
        strategy = getBufferStrategy();
        paintComponent();
    }

So wie ich mir das Vorstelle speicher ich in mousRelease jetzt die Werte von dem Rechteck und baue daraus dann ein neues Koordinatensystem aber wie ich das jetzt mit den anderen "früheren" Koordinaten abgleiche check ich nicht....
Ich hoffe jemand kann mir helfen!
mfg
steedz
 
Hallo,
bin leider immer noch nicht sonderlich weitergekommen. :(
Sollte man das ganze vielleicht mit affineTransform() irgendwie versuchen anzupacken?
 
Hallo stEEdZ
prinzipiell ist hier Dreisatz gefragt.
vielleicht können Dir diese Links Dir weiterhelfen.
http://www.tutorials.de/forum/java/319419-koordinatensystem-2.html
http://www.tutorials.de/forum/java/319419-koordinatensystem-3.html

Es sei jedoch angemerkt, dass in Deinem Fall der Nutzer offenbar den Zoom durch Mousegestik einstellen können soll (Rechteck per Mouse zeichnend).
Das bedeutet banal ausgedrückt, dass die Vorgaben für den Ausschnitt/Zoom, der als nächstes dargestellt werden soll, von einem Rechteck kommen. Also Sliderbar am Rand ist dann offenbar nicht erwünscht. Du musst möglicherweise zu der Höhe und Breite des Rechtecks eine Art vorgemerktes Raster kalkulieren damit zum einen die Proportionen für die Zoomdarstellung bezogen auf den vorhandenen Anzeigeplatz stimmen, zum anderen "schöne" Koordinateneinheiten, wie es die Aufgabe fordert, dargebracht werden können.

Also da steckt noch etwas mehr Kombination in Bezug auf Dreisatz drinn, das gefällt mir :-D

Soweit erstmal mein Brainstorming.

Bei weiteren Fragen könnte ich Dir vielleicht behilflich sein.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück