Punkt bewegt sich auf einer Ellipse

kann jemand mir helfen bei diesem Aufgabe

die Aufgabe besteht darin, einen Punk mit Hilfe eines Scheibe Reglers auf einer Ellipse zu bewegen

mfg hedro
 
Vielleicht: Die Position des Drehknopfes relativ zu Anfangs- und Endpunkt auf einen Kreis abbilden?

Regler = 0 -> Winkel 0
Regler = 0,25 -> Winkel π/2,
...
Regler = 1 -> Winkel 2π
 
ich habe das gemacht aber wie kann ich das punkt bewegen auf die Ellipse wenn ich den Schieberegler bewege ?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Event;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.KeyStroke;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class ellipse extends JFrame implements ChangeListener
{


double x = 100;
Leinwand meineLeinwand = new Leinwand();
JSlider meinSlider = new JSlider(0, 400, 0);
JPanel meinPanel = new JPanel(new BorderLayout());

public ellipse() {
super("Slider");
JMenuBar menubar = new JMenuBar();

JMenu menu1 = new JMenu("Edit");
JMenu menu2 = new JMenu("Gestaltung");
JMenu menu3 =createFileMenu();
menubar.add(menu3);
menubar.add(menu1);
menubar.add(menu2);


JMenuItem item1 = new JMenuItem("Copy");
JMenuItem item2 = new JMenuItem("Paste");
JMenuItem item3 = new JMenuItem("Delete");
menu1.add(item1);
menu1.add(item2);
menu1.addSeparator();
menu1.add(item3);



JMenu item4 = new JMenu("Ellipse_Farbe");
JMenu item5 = new JMenu("Hintergrund_Farbe");
JMenuItem item6 = new JMenuItem("Rot");
JMenuItem item7 = new JMenuItem("Gruen");
JMenuItem item8 = new JMenuItem("Blau");
item4.add(item6);item4.add(item7);item4.add(item8);
JMenuItem item9 = new JMenuItem("Rot");
JMenuItem item10 = new JMenuItem("Gruen");
JMenuItem item11 = new JMenuItem("Blau");
item5.add(item9);item5.add(item10);item5.add(item11);
menu2.add(item4);
menu2.add(item5);

setJMenuBar(menubar);
meineLeinwand.setSize(400, 400);
meineLeinwand.setForeground(Color.red);

meinSlider.addChangeListener(this);
meinPanel.add(meinSlider, BorderLayout.SOUTH);
meinPanel.add(meineLeinwand, BorderLayout.CENTER);
getContentPane().add(meinPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.lightGray);
setSize(500, 500);
setLocation(400, 200);
setVisible(true);
}

public void stateChanged(ChangeEvent e) {
JSlider sl = (JSlider) e.getSource();
x = sl.getValue();
meineLeinwand.repaint(x);
}

public static void main(String[] args) {
new ellipse();

}

private JMenu createFileMenu() {
JMenu ret = new JMenu("Datei");
ret.setMnemonic('D');
JMenuItem mi;
//Öffnen
mi = new JMenuItem("Oeffnen", 'f');
setCtrlAccelerator(mi, 'O');
ret.add(mi);
//Speichern
mi = new JMenuItem("Speichern", 'p');
setCtrlAccelerator(mi, 'S');
ret.add(mi);
//Separator
ret.addSeparator();
//Beenden
mi = new JMenuItem("Beenden", 'e');
ret.add(mi);
return ret;
}
private void setCtrlAccelerator(JMenuItem mi, char acc) {
KeyStroke ks = KeyStroke.getKeyStroke(
acc, Event.CTRL_MASK );
mi.setAccelerator(ks);
}
private class Leinwand extends JPanel
{
double x;
public void paintComponent(Graphics g)
{
super.paintComponent(g);

g.setColor(Color.magenta);
g.fillOval((int)(this.getWidth()/2 -3 ), (int)((this.getHeight()/2 -3 - 25)-x/2), 6, 6);
g.setColor(Color.RED);
g.drawOval((int)((this.getWidth()/2 -50 )-x/2), (int)((this.getHeight()/2 -25)-x/2), (int) (100 + x), (int) (50 + x));
//g.fillOval((int)((this.getWidth()/2 -50)-x/2), (int)((this.getHeight()/2 -25)-x/2), (int) (100 + x), (int) (50 + x));

System.out.println(x);
//System.out.println(this.getWidth());
//System.out.println(this.getHeight());

}

public void repaint(double x)
{
this.x = x;
repaint();
System.out.println(x);
}
}
}
 
Mal ein Beispiel:
Java:
import java.awt.*;
import javax.swing.*;

public class Test {
    static class Leinwand extends JComponent {
        int largeHalfAxis = 50;
        int smallHalfAxis = 25;
        int knobRadius = 3;
        double knobAngle = 0;

        public void setAngle(double angle) {
            knobAngle = angle;
            repaint();
        }

        public double getAngle() { return knobAngle; }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            int cx = this.getWidth() / 2;
            int cy = this.getHeight() / 2;

            g.setColor(Color.RED);
            g.drawOval(cx - largeHalfAxis, cy - smallHalfAxis, 2*largeHalfAxis, 2*smallHalfAxis);
            
            int x = (int) (largeHalfAxis*Math.cos(knobAngle));
            int y = (int) (smallHalfAxis*Math.sin(knobAngle));
            
            g.setColor(Color.magenta);
            g.fillOval(cx - x - knobRadius, cy - y - knobRadius, 2*knobRadius, 2*knobRadius);
        }
    }

    public void run() {
        Leinwand leinwand = new Leinwand();

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(leinwand);
        frame.setSize(800, 600);
        frame.setVisible(true);

        final long start = System.currentTimeMillis();
        Timer t = new Timer(30, e -> {
            long diff = (System.currentTimeMillis() - start) % 2000;
            leinwand.setAngle(diff*2*Math.PI/2000.0);
        });
        t.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
Viel Spaß damit.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben