[Java] Inzoomen op een Mandelbrot figuur

Pagina: 1
Acties:
  • 237 views sinds 30-01-2008
  • Reageer

  • Down
  • Registratie: Februari 2005
  • Laatst online: 07-02 11:53
Ik heb al gezocht op Mandelbrot maar die topics gingen alleen maar over problemen m.b.t. de berekeningen. Het plotten van de figuur gaat prima evenals het gebruik van de schaal. Ik heb alleen probleempje met inzoomen.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public void mouseClicked (MouseEvent e)
        {
                if (e.getButton() == 1) // linkermuisknop 
                {
                    // de schaal wordt 2 keer zo klein
                    schaal *= 0.5;
                    
                    // de x en y coordinaat van de klik
                    X = (e.getX() - 200) * schaal;
                    Y = (e.getY() - 200) * schaal;

                    // de tekstvelden updaten
                    txtY.setText(Double.toString(Y));
                    txtX.setText(Double.toString(X));

                    // tekstveld updaten
                    txtSchaal.setText(Double.toString(schaal));

                    // opnieuw tekenen maar nu dus ingezoomd
                    this.paint(this.getGraphics());
                }
     }


De code van de event handler. X en Y zijn de waarden die worden gepasst naar de functie die het Mandelgetal berekend. De applet is 400 bij 400 en als ik op een positie klik wordt de schaal dus verdubbelt en is het de bedoeling dat het geklikte coordinaat het middelpunt wordt, alleen gebeurt dat dus niet. Volgens mij zie ik iets over het hoofd. :)

Mother north, how can they sleep while their beds are burning?


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:32

TeeDee

CQB 241

Wat gebeurt er niet? Het inzoomen?
Wat zijn je X / Y waardes na het klikken?

Even heel simpel:
X = 100-200 * 0.5 = -50

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-02 11:06

Janoz

Moderator Devschuur®

!litemod

Je hoort afaik niet rechtstreeks de paint methode aan te roepen, maar de repaint methode. Daarnaast is er natuurlijk erg weinig te zeggen wanneer je niet verteld wat nu precies de X en de Y inhouden (Sowieso is het in java niet gebruikelijk om een variabele naam met een hoofdletter te schrijven)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Natuurlijk werkt het niet goed. Ten eerste hangen je nieuwe X en Y momenteel niet af van de oude waarden (wat uiteraard niet klopt - de plek waar je klikt met de muis op de mandelbrot klikt hangt af van de huidige X en Y). Ten tweede verklein je de schaal vóórdat je de nieuwe X en Y waarden berekent.

[ Voor 5% gewijzigd door .oisyn op 28-09-2006 16:22 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sammy
  • Registratie: Maart 2000
  • Laatst online: 12-02 21:27
offtopic:
och, is Imperatief Programmeren aan de UU weer begonnen :) ?

  • Down
  • Registratie: Februari 2005
  • Laatst online: 07-02 11:53
.Oisyn, je hebt gelijk, dom dom dom.
Java:
1
2
X = X + (e.getX() - 200) * schaal;
Y = Y + (e.getY() - 200) * schaal;


Dat is 'em.

Janoz, ik ben niet echt een java guru, maar waarom? Repaint() repaint toch het hele component wat in mijn geval hetzelfde is als paint? (de applet is dus simpelweg alleen de mandelbrot figuur, paint() tekent de figuur)

Sammy, dat klopt. Een vriendin van een maat is er mee bezig maar had nog nooit geprogrammeerd dus ik wilde haar een handje helpen (en uitleggen), maar goed, het werkt nu. Bedankt, allen.

Mother north, how can they sleep while their beds are burning?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-02 11:06

Janoz

Moderator Devschuur®

!litemod

uit oa http://java.sun.com/produ...icles/painting/index.html
In general, programs should avoid placing rendering code at any point where it might be invoked outside the scope of the paint callback. Why? Because such code may be invoked at times when it is not appropriate to paint -- for instance, before the component is visible or has access to a valid Graphics object. It is not recommended that programs invoke paint() directly.

To enable app-triggered painting, the AWT provides the following java.awt.Component methods to allow programs to asynchronously request a paint operation:

code:
1
2
3
4
5
    public void repaint() 
    public void repaint(long tm) 
    public void repaint(int x, int y, int width, int height) 
    public void repaint(long tm, int x, int y, 
                   int width, int height)
Paint is niet hetzelfde als repaint.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Een beetje offtopic wellicht (en toch ook weer niet ;)), maar kijk voor de lol hier eens naar.
Mooi toch!? :)

[ Voor 45% gewijzigd door Verwijderd op 28-09-2006 21:18 ]

Pagina: 1