Punkt bewegt sich auf einer Ellipse

Diskutiere Punkt bewegt sich auf einer Ellipse im Java Basics - Anfänger-Themen Bereich.
H

hedro

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
 
H

hedro

eigentlich ich habe nur die Ellipse gemach aber das Rest kann ich nicht
 
W

White_Fox

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π
 
H

hedro

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);
}
}
}
 
mihe7

mihe7

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.
 
Thema: 

Punkt bewegt sich auf einer Ellipse

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben