Drehen RGB Würfel

sweti3

Mitglied
Hei Leute. Ich habe einen RGB Farbwürfel programmiert, der alle 16,7 Milionen Farben anzeigt. nun würde ich gerne einen Slider einbauen, mit dem man diesen Würfel drehen kann. Hier hab ich euch mal den Code:

Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;

import javax.swing.JButton;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import junit.framework.Test;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {
	private JButton jBuZeichnen;
	

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				NewJFrame inst = new NewJFrame();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public NewJFrame() {
		super();
		initGUI();
	}
	
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				jBuZeichnen = new JButton();
				getContentPane().add(jBuZeichnen);
				jBuZeichnen.setText("Würfel zeichnen");
				jBuZeichnen.setBounds(842, 738, 147, 21);
				jBuZeichnen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						jBuZeichnenActionPerformed(evt);
					}
				});
			}
			pack();
			this.setSize(1022, 828);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void jBuZeichnenActionPerformed(ActionEvent evt) {
		 
		Graphics g = this.getGraphics();
	       
	      for(int rot=0; rot<=255;rot++){
	    	  for (int i=0; i<=255;i++) {
		           for (int x=0; x<=255;x++) {
		               g.setColor(new Color(rot,255-i,x));
		               g.drawLine(+i+rot*1/2,50+x+rot*1/2,+i+1/2*rot,50+x+rot*1/2);
		               
		            }
		          }
	      
	      }
	       
	      
	       
	       
	       
	       
	    }
	}

Gibt es da einen Befehl dafür oder so etwas ? ich möchte ihn um 180° nach links und um 180° nach rechts verschieben können.

Viele Grüße

sweti3
 

Volvagia

Top Contributor
Ne, auf ein Bild.

Java:
private static BufferedImage rotateImage(BufferedImage source, double angle)
{
	double a = Math.toRadians(angle);
	int w = source.getWidth();
	int h = source.getHeight();
	int t = BufferedImage.TYPE_INT_ARGB;

	AffineTransform affineTransform = AffineTransform.getRotateInstance(a, w / 2, h / 2);
	BufferedImage rotatedImage = new BufferedImage(w, h, t);
	Graphics2D g = (Graphics2D) rotatedImage.getGraphics();
	g.setTransform(affineTransform);
	g.drawImage(source, 0, 0, null);
	g.dispose();
	
	return(rotatedImage);
}
 

sweti3

Mitglied
also bei mir unterstreicht er das [JAVA=42] double a = Math.toRadians(angle);
int w = source.getWidth();
int h = source.getHeight();
int t = BufferedImage.TYPE_INT_ARGB; [/code]

source und angle ?
und sagt:

Code:
source cannot be resolved to a variable
 

sweti3

Mitglied
bzw. Wie kann ich das Bild dann so in mein Programm einfügen, dass der Würfel darauf gezeichnet wird, und sich der Würfel dreht ?
 

Marco13

Top Contributor
Also, hab's mal angestartet... nach wenigen Minuten dürfte der Würfel fertig gezeichnet sein ... falls man nicht die Fenstergröße zwischendurch ändert ( nicht getGraphics auf einer Component aufrufen!!!). Den Würfel "drehen" im Sinne einer Drehung im 3D-Raum wird so nichts.

Beschreib' erstmal was da rauskommen soll. Mit OpenGL wäre das .... vielleicht eher hinzukriegen... Aber etwas aufwändiger als im Moment.
 

Marco13

Top Contributor
Mit einem import hat das wohl nichts zu tun (DEN macht die IDE ja auch automatisch :autsch: ;) )

Es gibt keine Variable "source". Vermutlich wurde der Inhalt der Methode einfach unmotiviert irgendwo hin kopiert.
 

Volvagia

Top Contributor
Bei mir unter Eclipse nicht. Nur wenn ich direkt von einer Datei in eine andere kopiere, selbst wenn das import garnicht nötig wäre. Hab bei meinen Server und Client jeweils 1 Interface. Das Interface definiert nur Konstanten aus einer Klasse für die Kommunikation, und muss deshalb ab und zu abgeglichen werden. Wollte eins davon nicht im Classpath des anderen legen, um komplizierende Abhängigkeiten zu vermeiden. Wenn ich von einen Interface ins andere kopiere fügt er den import des Client der Klasse ein, obwohl sie am Server im selben Verzeichnis wie das Interface liegt und die Package-Hierarchie anderst ist.
Könnte aber auch an den Einstellung liegen. Wenn ich die Methode in eine beliebige Klasse von hier aus kopiere, importiert er nichts.

Aber du hast recht, es gibt in dem Fall keinen Fehler bei dem Variablenzugriff. Hab mir eingebildet, ich hatte schon mal einen. :autsch:
Auf die Möglichkeit, dass er einfach den Inhalt kopiert hat wäre ich so schnell nicht gekommen.
 

sweti3

Mitglied
Also einfach kopiert hab ich nicht, aber dieses source wird immer angestrichen :( ich möchte es so machen, dass ich den Würfel mit nem Schiebe-Regeler drehen kann, geht das nicht mit eclipse ?:rtfm:
 

Marco13

Top Contributor
Das hat nichts mit Eclipse zu tun. Poste ggf. mal den aktuellen code, wo der Fehler auftritt.

Aber nochmal: Was genau hast du vor? Es kann gut sein, dass das mit diesem Ansatz nichts wird, je nachdem, was genau du vorhast...
 
S

Spacerat

Gast
Also ohne irgentwelche Transformationsmatritzen und Vektoren wird das wohl kaum was. Bedeutet entweder das bereits erwähnte OpenGL im Zweifelsfalle mit Render2Texture oder Softwaremässig selbst implementiert. Für letzteres das Graphics Object in Graphics2D casten und mit AffineTransform arbeiten.

...und zu aller Belustigung 'ne Haarspalterei... Was auf keinen Fall geht: alle 16,78 Millionen Farben auf einem Bildschirm ;) Denn ein 4:3 Screen der das könnte bräuchte eine Auflösung von mindestens 5120X3840 Pixeln...
 

sweti3

Mitglied
so hab jetzt den Würfel in 3D hinbekommen, mit rotieren. Jetzt hänge ich daran, die einzelnen Flächen einzufärben... -.- :autsch:

[JAVA=42] import java.awt.*;
import java.applet.*;

public class Wuerfel extends Applet {

// 8 Eckpunkte 1-8
// mit je 3 Koordinaten 1,2,3 (x,y,z)
double p[][] = new double[9][4];

int x=1, y=2, z=3;

public void init() {
setBackground(new Color(255,255,255));

// 8 Eckpunkte im lokalen Würfel-Koordinatensystem
// Nullpunkt = Mittelpunkt
p[1][x] = -100; p[1][y] = -100; p[1][z] = -100;
p[2][x] = +100; p[2][y] = -100; p[2][z] = -100;
p[3][x] = +100; p[3][y] = -100; p[3][z] = +100;
p[4][x] = -100; p[4][y] = -100; p[4][z] = +100;
p[5][x] = -100; p[5][y] = +100; p[5][z] = -100;
p[6][x] = +100; p[6][y] = +100; p[6][z] = -100;
p[7][x] = +100; p[7][y] = +100; p[7][z] = +100;
p[8][x] = -100; p[8][y] = +100; p[8][z] = +100;

// 8 - - - - - 7
// / | / |
// 5 - - - - - 6 |
// | | | |
// | 4 - - - -|- 3
// | / | /
// 1 - - - - - 2
}

// Rotationswinkel in Grad
double angle_x = 0.01;
double angle_y = 0.0075;
double angle_z = 0.005;

Image buffer;
Graphics2D gBuffer;

public void paint(Graphics g) {

// Double-Buffering
if (buffer==null) {
buffer=createImage(700, 700);
gBuffer=(Graphics2D)buffer.getGraphics();
}
gBuffer.clearRect(0,0,this.getSize().width, this.getSize().height);

// Antialiasing
gBuffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

// Lokale Würfel-Koordinaten
// in Welt-Koordinaten: +200
gBuffer.drawLine((int)(p[1][x])+200,(int)(p[1][y])+200,
(int)(p[2][x])+200,(int)(p[2][y])+200);
gBuffer.drawLine((int)(p[2][x])+200,(int)(p[2][y])+200,
(int)(p[3][x])+200,(int)(p[3][y])+200);
gBuffer.drawLine((int)(p[3][x])+200,(int)(p[3][y])+200,
(int)(p[4][x])+200,(int)(p[4][y])+200);
gBuffer.drawLine((int)(p[4][x])+200,(int)(p[4][y])+200,
(int)(p[1][x])+200,(int)(p[1][y])+200);
gBuffer.drawLine((int)(p[5][x])+200,(int)(p[5][y])+200,
(int)(p[6][x])+200,(int)(p[6][y])+200);
gBuffer.drawLine((int)(p[6][x])+200,(int)(p[6][y])+200,
(int)(p[7][x])+200,(int)(p[7][y])+200);
gBuffer.drawLine((int)(p[7][x])+200,(int)(p[7][y])+200,
(int)(p[8][x])+200,(int)(p[8][y])+200);
gBuffer.drawLine((int)(p[8][x])+200,(int)(p[8][y])+200,
(int)(p[5][x])+200,(int)(p[5][y])+200);
gBuffer.drawLine((int)(p[1][x])+200,(int)(p[1][y])+200,
(int)(p[5][x])+200,(int)(p[5][y])+200);
gBuffer.drawLine((int)(p[2][x])+200,(int)(p[2][y])+200,
(int)(p[6][x])+200,(int)(p[6][y])+200);
gBuffer.drawLine((int)(p[3][x])+200,(int)(p[3][y])+200,
(int)(p[7][x])+200,(int)(p[7][y])+200);
gBuffer.drawLine((int)(p[4][x])+200,(int)(p[4][y])+200,
(int)(p[8][x])+200,(int)(p[8][y])+200);

g.drawImage (buffer, 0, 0, this);

// Verzögerung
try {Thread.sleep(10);}
catch (InterruptedException e) {}

double px, py, pz;

for (int i=1;i<9;i++) {

px = p[x];
py = p[y];
pz = p[z];

// Rotation um x-Achse
p[y] = py*Math.cos(angle_x)-pz*Math.sin(angle_x);
p[z] = py*Math.sin(angle_x)+pz*Math.cos(angle_x);

py = p[y];
pz = p[z];

// Rotation um y-Achse
p[x] = px*Math.cos(angle_y)+pz*Math.sin(angle_y);
p[z] =-px*Math.sin(angle_y)+pz*Math.cos(angle_y);

px = p[x];

// Rotation um z-Achse
p[x] = px*Math.cos(angle_z)-py*Math.sin(angle_z);
p[y] = py*Math.cos(angle_z)+px*Math.sin(angle_z);
}

repaint();
}

public void update(Graphics g) {paint(g);}
}
[/code]
wie soll ich da die Farben reinkriegen ?
 

sweti3

Mitglied
ähm ja :D ich wollte eigentlich meinen ursprünglichen Würfel sich drehen lassen, also den RGB würfel. jetzt hab ich nen rotierenden würfel, aber ich muss jetzt auf jede Seite diese Farbmischung machen -.- ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
N Bild drehen Java Basics - Anfänger-Themen 3
R Java ImageIcon drehen Java Basics - Anfänger-Themen 6
R Image drehen Java Basics - Anfänger-Themen 1
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
I String um 90 Grad drehen Java Basics - Anfänger-Themen 17
B Erste Schritte Drehen in Graphics2d Java Basics - Anfänger-Themen 2
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
P Vektor im R3 drehen? Java Basics - Anfänger-Themen 14
O BufferedImage drehen, falsch positioniert Java Basics - Anfänger-Themen 5
A Array drehen Java Basics - Anfänger-Themen 2
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
L Array drehen Java Basics - Anfänger-Themen 8
S Drehen eines Pfeils im Flug Java Basics - Anfänger-Themen 10
F Bild drehen Java Basics - Anfänger-Themen 9
A Javaspiel im Handy mit Drehen Java Basics - Anfänger-Themen 12
A Grafik2d Objekte drehen, Idee da, Problem in Umsetzung Java Basics - Anfänger-Themen 3
A Denkanstoß: Drehen eines Bildes (Matrix) Java Basics - Anfänger-Themen 5
S JPG drehen, skalieren und speichern Java Basics - Anfänger-Themen 15
D Image drehen Java Basics - Anfänger-Themen 6
S Zeichnung drehen Java Basics - Anfänger-Themen 13
H Drehen von Label Java Basics - Anfänger-Themen 2
R 2dimensionales array um 90 grad drehen Java Basics - Anfänger-Themen 2
T Bild drehen + richtige größe berechnen Java Basics - Anfänger-Themen 4
J Kann man ein JFrame/JWindow 90/-90 drehen? Java Basics - Anfänger-Themen 9
B array drehen Java Basics - Anfänger-Themen 11
G Aufgabe rekursiv Zahlen drehen Java Basics - Anfänger-Themen 5
T Programmierauftrag Würfel Java Basics - Anfänger-Themen 4
Elyt Würfel mit bildlicher Anzeige Java Basics - Anfänger-Themen 2
x-tshainge Schleife für ein Würfel Programm Java Basics - Anfänger-Themen 2
T opengl Dreick in einen Würfel umwandeln Java Basics - Anfänger-Themen 0
A Würfel Java Basics - Anfänger-Themen 8
J BlueJ Liste Würfel Projekt Java Basics - Anfänger-Themen 2
W Gui Würfel. String Problem. Java Basics - Anfänger-Themen 7
U Erste Schritte Leidiges Anfängerthema: Würfel Java Basics - Anfänger-Themen 5
P Würfel Pasch Java Basics - Anfänger-Themen 24
M OOP Würfel Problem Java Basics - Anfänger-Themen 11
D Wahrscheinlichkeiten bei Würfel ändern Java Basics - Anfänger-Themen 7
D Würfel mit Statistik Java Basics - Anfänger-Themen 8
C Würfel-Programm Java Basics - Anfänger-Themen 12
J 3d würfel Java Basics - Anfänger-Themen 13
L würfel zeichnen Java Basics - Anfänger-Themen 1
M Würfel spiel Java Basics - Anfänger-Themen 4
W Würfel ! Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben