Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » winkel umkehren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen winkel umkehren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Michael
Grünschnabel


Dabei seit: 01.07.2012
Beiträge: 2

winkel umkehren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
ich habe ein Programm das bei Berührung zweier Objekte (Das Objekt "Ball" bewegt sich mit konstanter Geschwindigkeit) das bewegliche Objekt Ball vom Winkel her umkehren soll.Also soll wenn Ball im eingangsWinkel 50° auf ein anderes Objekt trifft auch der ausgangsWinkel 50° betragen.

Meine Ideen:
Ich habe versucht es mit X und Y Werten abhängig von der entfernung zum unbeweglichen Objekt zu lösen doch das hat leider nicht funktioniert unglücklich
01.07.2012 14:56 Michael ist offline E-Mail an Michael senden Beiträge von Michael suchen Nehmen Sie Michael in Ihre Freundesliste auf
3FingerbreitNougat
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du hast also die Koordinate X und Y. Dazu noch den Richtungsvektor R und S.
Dazu noch eine "Wand", die Ebenfalls Koordinaten hat. XW und YW, Richtungsvektor RW und SW.

Daraus kannst du bei gleichem Eingangs und Ausgangswinkel schonmal eine Zeichnung machen.

Ein Teil des Codes wäre ebenfalls sicher vom Vorteil smile
11.07.2012 16:40
Michael
Grünschnabel


Dabei seit: 01.07.2012
Beiträge: 2

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe das problem inzwischen gelöst falls dich interessiert wie:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.math.*;
import java.awt.image.BufferedImage;


public class Viereck extends JFrame {
private JButton viereck,rechts,oben,unten;
private static int arg1=150,arg2=100,arg3=500,arg4=250,ver,ver2;
private static int arg9=650, arg10=100;
private JButton viereck2, rechts2, oben2, unten2;
private static JLabel ball, linie1, linie2, goals1, goals2;
public static int score1=0, score2=0;
Viereck() {
super();
this.setTitle("viereck bewegen");

this.setLayout(null);

goals1 = new JLabel();
goals1.setText("Spieler 1 hat " + String.valueOf(score1) + " Punkte");
goals1.setBounds(200, 35, 250, 15);
goals2 = new JLabel();
goals2.setText("Spieler 2 hat " + String.valueOf(score2) + " Punkte");
goals2.setBounds(775, 35, 250, 15);
linie1 = new JLabel();
linie2 = new JLabel();
ImageIcon vonLinie = new ImageIcon("linie.png");
linie1.setIcon(vonLinie);
linie2.setIcon(vonLinie);
linie1.setBounds(200, 50, 700, 10);
linie2.setBounds(200, 550, 700, 10);
ball = new JLabel();
ImageIcon vonball = new ImageIcon("ball.gif");
ball.setIcon(vonball);
ball.setBounds(arg3, arg4, 20, 20);

int alt = (int)Math.round((Math.random()*3));
if (alt == 0 ) {ver = 1;ver2 = 1;}
if (alt == 1 ) {ver = -1;ver2 = 1;}
if (alt == 2 ) {ver = 1;ver2 = -1;}
if (alt == 3 ) {ver = -1;ver2 = -1;}

// für das blaue Viereck
rechts = new JButton("r");
//rechts.setVisible(false);
rechts.setMnemonic(KeyEvent.VK_D);
rechts.addActionListener(new Richtung());
rechts.setBounds(1300, 800, 5, 5);
oben = new JButton("o");
//oben.setVisible(false);
oben.setMnemonic(KeyEvent.VK_W);
oben.addActionListener(new Richtung());
oben.setBounds(1300, 800, 5, 5);
unten = new JButton("u");
//unten.setVisible(false);
unten.setMnemonic(KeyEvent.VK_S);
unten.addActionListener(new Richtung());
unten.setBounds(1300, 800, 5, 5);
viereck = new JButton("Hallo");
viereck.setBounds(arg1, arg2, 60, 60);
viereck.setMnemonic(KeyEvent.VK_A);
viereck.addActionListener(new Richtung());

// für das Rote Viereck
rechts2 = new JButton("r");
//rechts.setVisible(false);
rechts2.setMnemonic(KeyEvent.VK_RIGHT);
rechts2.addActionListener(new Richtung2());
rechts2.setBounds(1300, 800, 5, 5);
oben2 = new JButton("o");
//oben.setVisible(false);
oben2.setMnemonic(KeyEvent.VK_UP);
oben2.addActionListener(new Richtung2());
oben2.setBounds(1300, 800, 5, 5);
unten2 = new JButton("u");
//unten.setVisible(false);
unten2.setMnemonic(KeyEvent.VK_DOWN);
unten2.addActionListener(new Richtung2());
unten2.setBounds(1300, 800, 5, 5);
viereck2 = new JButton("Hallo2");
viereck2.setBounds(arg9, arg10, 60, 60);
viereck2.setMnemonic(KeyEvent.VK_LEFT);
viereck2.addActionListener(new Richtung2());

ImageIcon blau = new ImageIcon("blau.gif");
ImageIcon rot = new ImageIcon("rot.gif");
viereck.setIcon(blau);
viereck2.setIcon(rot);

this.getContentPane().setBackground(new Color(0, 0, 0));
this.getContentPane().add(viereck);
this.getContentPane().add(goals2);
this.getContentPane().add(goals1);
this.getContentPane().add(rechts);
this.getContentPane().add(oben);
this.getContentPane().add(unten);
this.getContentPane().add(viereck2);
this.getContentPane().add(rechts2);
this.getContentPane().add(oben2);
this.getContentPane().add(unten2);
this.getContentPane().add(ball);
this.getContentPane().add(linie1);
this.getContentPane().add(linie2);
this.getContentPane().update(getGraphics());

}
Viereck(int score1,int score2) {
this();
this.score();

}

// blaue bewegung
class Richtung implements ActionListener {
public void actionPerformed(ActionEvent e) {
String richt = e.getActionCommand();
if (richt.equals("r")) {
arg1 += 20;
}
if (richt.equals("Hallo")) {
arg1 -= 20;
}
if (richt.equals("o")) {
arg2 -= 20;
}
if (richt.equals("u")) {
arg2 += 20;
}
viereck.setBounds(arg1, arg2, 60, 60);
viereck.update(getGraphics());
}
}

// rote bewegung
class Richtung2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String richt = e.getActionCommand();
if (richt.equals("r")) {
arg9 += 20;
}
if (richt.equals("Hallo2")) {
arg9 -= 20;
}
if (richt.equals("o")) {
arg10 -= 20;
}
if (richt.equals("u")) {
arg10 += 20;
}
viereck2.setBounds(arg9, arg10, 60, 60);
viereck2.update(getGraphics());
}
}


public void ab() {
viereck.update(getGraphics());
this.getContentPane().update(getGraphics());
}

// Score
public void score() {
if (arg3<175) {
++score2;
goals1.setText("Spieler 1 hat " + String.valueOf(score1) + " Punkte");
goals2.setText("Spieler 2 hat " + String.valueOf(score2) + " Punkte");
if (score2>=1000) {
System.out.println("Spieler 2 hat gewonnen");
System.exit(0);
}
}
if (arg3>925) {
++score1;
goals1.setText("Spieler 1 hat " + String.valueOf(score1) + " Punkte");
goals2.setText("Spieler 2 hat " + String.valueOf(score2) + " Punkte");
if (score1>=1000) {
System.out.println("Spieler 1 hat gewonnen");
System.exit(0);

}
}
}

public static void main(String[] args) {
Viereck Fenster = new Viereck();
Fenster.pack();
Fenster.setVisible(true);
Fenster.setSize(1280, 720);
while (true) {
try {
arg3 += ver;
arg4 += ver2;
// wenn der Ball irgendwo gegen kommt

// von links gegen rechten ODER von rechts gegen linken
if ((arg3+20==arg9&&(arg4>=arg10&&arg4<=(arg10+60)))||
(arg3==(arg1+60)&&(arg4>=arg2&&arg4<=(arg2+60)))) {
ver *= -1;
}
// von rechts gegen links ODER von links gegen rechts
if ((arg3==(arg9+60)&&(arg4>=arg10&&arg4<=(arg10+60)))||
(arg3==arg1&&(arg4>=arg2&&arg4<=(arg2+60)))) {
ver *= -1;
}
// von oben
if (((arg4+20)==arg10&&(arg3>=arg9&&arg3<=(arg9+60)))||
((arg4+20)==arg2&&(arg3>=arg1&&arg3<=(arg1+60)))) {
ver2 *= -1;
}
// von unten
if ((arg4==(arg10+60)&&(arg3>=arg9&&arg3<=(arg9+60)))||
(arg4==(arg2+60)&&(arg3>=arg1&&arg3<=(arg1+60)))) {
ver2 *= -1;
}

// Oben und unten linien
if (arg4<=50) {
ver2 *= -1;
}
if (arg4>=540) {
ver2 *= -1;
}
// rechts und links
if (arg3==25) {
ver *= -1;
}
if (arg3==1075) {
ver *= -1;
}

Fenster.score();
Thread.sleep(5);
System.out.println(arg3);
ball.setBounds(arg3, arg4, 20, 20);
Fenster.ab();
} catch (InterruptedException e) {
System.out.println("fail!");
}
}
}

}
P.S.: ich weiß nicht wie man die Frage als beantwortet einträgt also schließt
30.07.2012 10:54 Michael ist offline E-Mail an Michael senden Beiträge von Michael suchen Nehmen Sie Michael in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke für die Rückmeldung, wird immer gern gesehen. Schließen des Themas ist nicht möglich.

VG,

Karlito
30.07.2012 17:39 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » winkel umkehren