2D-Grafik Linie erweitern?

Gossi

Bekanntes Mitglied
Hallo,

Ich habe immo ein Problem mit dem ich nicht weiter komme:

Gegeben sei folgendes Bild:
Anhang anzeigen 3670

Wir haben also einen Punkt (unseren Spieler) und einen Punkt (Klick) wo mit der Maus geklickt wird. Jetzt möchte ich eine Linie berechnen, die bis:
  • Zum Rand der Karte
  • Zur nächsten Mauer
  • Zu einem Gegner

Führt, die Collision ist nicht das Problem, nur das erweitern der Linie, wenn mir da einer auf die Sprünge helfen könnte wäre das super....
 

Gossi

Bekanntes Mitglied
Schnittpunkt zweier Geraden | Mathematik

ohne Mathe keine Informatik ;)

bzw. was suchst du überhaupt?
wenn du Kollision schon berechnest hast du schon den Schnittpunkt oder was genau?

Nee, die Collisionsabfrage ist nicht das Problem, also die Methode habe ich schon (hab ich aus nem alten Spiel importiert), aber mir fehlt die erweiterung der Linie, ich weiß ja wie ich in java ne Linie von Punkt a zu punkt b zeichnen kann, aber wie erweiter ich die bis sie auf irgendein Object trifft, bzw. wie erweitere ich die überhaupt?

Edith:
Das einzige was mir einfallen würde:

Punkt A : 20:40
Punkt B : 30:70

Dann könnte ich natürlich immer eine Linie zeichnen die

Java:
drawLine(alterPunkt.getX(), altenPunkt.getY(), altenPunkt.getX() + 10, altenPunkt.getY() + 30);
immer so erweitert wird, aber sowas muss doch schöner gehen..
 
Zuletzt bearbeitet:
S

SlaterB

Gast
viele Zeilen, aber nicht verraten wie die Kollisionsabfrage funktioniert ;)

meiner Ansicht nach müsstest du dafür schon jetzt einen Schnittpunkt ausrechnen, wenn noch nicht, dann eben jetzt der Fall,
jedenfalls bis zum Schnittpunkt malen,
bei zwei Geraden ist der Schnittpunkt einfach zu berechnen, bei anders geformten Objekten schwieriger,

will man nicht mit allen Linien alle Objekte im Raum vergleichen, lohnt es sich natürlich, den Raum etwas zu strukturien,
nur Objekte in der entsprechenden Richtung zu berücksichtigen
 

Gossi

Bekanntes Mitglied
viele Zeilen, aber nicht verraten wie die Kollisionsabfrage funktioniert ;)

Wenns dich so glücklich :D

Java:
	public boolean checkOpaqueColorCollisions(final Sprite s) {
		Rectangle2D.Double cut = (Double) this.createIntersection(s);

		if ((cut.width < 1) || (cut.height < 1)) {
			return false;
		}

		Rectangle2D.Double subMe = getSubRec(this, cut);
		Rectangle2D.Double subHim = getSubRec(s, cut);

		BufferedImage imgMe = pics[currentpic].getSubimage((int) subMe.x,
				(int) subMe.y, (int) subMe.width, (int) subMe.height);
		BufferedImage imgHim = s.pics[s.currentpic].getSubimage((int) subHim.x,
				(int) subHim.y, (int) subHim.width, (int) subHim.height);

		for (int i = 0; i < imgMe.getWidth(); i++) {
			for (int n = 0; n < imgHim.getHeight(); n++) {

				int rgb1 = imgMe.getRGB(i, n);
				int rgb2 = imgHim.getRGB(i, n);

				if (isOpaque(rgb1) && isOpaque(rgb2)) {
					return true;
				}
			}

		}

		return false;
	}

	protected Rectangle2D.Double getSubRec(final Rectangle2D.Double source,
			final Rectangle2D.Double part) {

		Rectangle2D.Double sub = new Rectangle2D.Double();

		if (source.x > part.x) {
			sub.x = 0;
		} else {
			sub.x = part.x - source.x;
		}
		if (source.y > part.y) {
			sub.y = 0;
		} else {
			sub.y = part.y - source.y;
		}

		sub.width = part.width;
		sub.height = part.height;

		return sub;
	}

	protected boolean isOpaque(final int rgb) {
		int alpha = (rgb >> 24) & 0xff;

		return alpha == 0;
	}

PS:
Is 1 zu 1 von Quaxli abgeschrieben ^^
 
Zuletzt bearbeitet:
S

SlaterB

Gast
hmm hmm,
und du kannst mit Images usw leben? gegenüber Rechnen kann das evtl. 1000fach langsamer sein

na jedenfalls gilt dann aus meiner Sicht mein erster Satz,
wenn es um Pixel geht dann Pixel bzw. Koordinaten berechnen



Code:
          x




          |
  /       |
 /        |
/         |
zwei Linien treffen sich an einem bestimmten Punkt, den kann man ganz leicht ausrechnen
 

Gossi

Bekanntes Mitglied
Ich glaube wir reden aneinander vorbei, ich möchte nicht wissen WO sich die beiden Linien treffen, sondern WIE ich meine Linie verlängern kann in Java auf ne schöne Art und Weise...

Es treffen sich bei mir ja nicht 2 Linien sondern ne Linie trifft ein Object (gut, könnte auch ne Linie sein ^^)
 
S

SlaterB

Gast
noch ein Posting, dann störe ich dich nicht weiter bis entweder jemand anders was besseres nennt oder die Wartezeit dich zur Mathematik konvertieren lässt:
es gibt aber keine Zauberei, die irgendwas automatisch macht, jede Zeichnung muss vorher berechnet werden,
das was du willst ist in der API nicht vorgesehen, schon gar nicht in Java2D nur mit drawLine(x,y,x,y)
 

Gossi

Bekanntes Mitglied
Nicht schön aber ne Lösung ^^

Java:
//p is nen Point ^^
int erwX = 0;
int erwY = 0;
erwX = p.x + (p.x - 20);   //20 = player.getX()
erwY = p.y + (p.y - 150);  //150 = player.getY()
g.drawLine(p.x, p.y, erwX, erwY);
 

Marco13

Top Contributor
Was soll das denn alles? Punkte P und Q gegeben, gesucht der Strahl von P durch Q

D = Q-P
D /= d.length();
V = P + x * D;

V ist der Endpunkt der Verlängerten Linie, und X irgendeine Zahl
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX Diagonale Linie nicht ausgegeben/angezeigt AWT, Swing, JavaFX & SWT 1
G Linie mit der Maus auswählen AWT, Swing, JavaFX & SWT 5
G JavaFX Line Chart mit Farbverlauf/Gradient in Linie AWT, Swing, JavaFX & SWT 1
L 2D-Grafik Linie von Kreis zu Kreis AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
K JavaFX Linie immer in der Mitte der Szene halten AWT, Swing, JavaFX & SWT 12
L JavaFX Horizontale Linie zur Scene binding AWT, Swing, JavaFX & SWT 3
3 2D-Grafik BasicStroke dash pattern - Linie zu lang!? AWT, Swing, JavaFX & SWT 1
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
javampir Kubische Interpolation einer Linie AWT, Swing, JavaFX & SWT 5
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
B Linie zwischen 2 Elementen AWT, Swing, JavaFX & SWT 5
propra Auf einem JPanel gezeichnete Linie auswählen AWT, Swing, JavaFX & SWT 3
V Linie mit Länge und Bogenmaß AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Linie hat Löcher AWT, Swing, JavaFX & SWT 10
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
K 2D-Grafik Linie verschwindet beim Zeichnen AWT, Swing, JavaFX & SWT 10
I Schrift und Farbe formatieren, und zwar pro Linie... AWT, Swing, JavaFX & SWT 4
C Swing JTable: Horizontale Linie bei einzelnen Zellen ausblenden AWT, Swing, JavaFX & SWT 5
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
B SWT Linie soll in Abhängigkeit der aktuellen Uhrzeit gezeichnet werden AWT, Swing, JavaFX & SWT 16
M Labels in ScrollPane mit Linie verbinden AWT, Swing, JavaFX & SWT 2
R JPanel - zeichnen in skalierten Bereich - Linie (X-Achse) nicht sichtbar AWT, Swing, JavaFX & SWT 11
J Swing - ich sehe keine Linie, andere schon AWT, Swing, JavaFX & SWT 6
S JXTaskPane und gepunktete Linie AWT, Swing, JavaFX & SWT 2
G SWT Linie AWT, Swing, JavaFX & SWT 13
F Rahmen mit gestrichelter Linie zeichnen AWT, Swing, JavaFX & SWT 4
G Linie nach Höhe einer Zahl zeichnen? AWT, Swing, JavaFX & SWT 3
M Linie zwischen JComponents AWT, Swing, JavaFX & SWT 5
T Linie langsam zeichnen AWT, Swing, JavaFX & SWT 3
L Linie mit drawLine auf JPanel AWT, Swing, JavaFX & SWT 7
A gezeichnete Linie verschwindet, wenn ich JMenuBar öffne AWT, Swing, JavaFX & SWT 2
S Problem mit dem Zeichnen einer Linie auf einem JPanel AWT, Swing, JavaFX & SWT 30
TheJavaKid Kreis, Rechteck, Linie. verschieben AWT, Swing, JavaFX & SWT 5
Student "Dicke" einer Linie - Line2D.Double AWT, Swing, JavaFX & SWT 12
R drawLine gibt hässliche linie AWT, Swing, JavaFX & SWT 4
T Vertikale Linie abgeschnitten AWT, Swing, JavaFX & SWT 2
C Linie in einem JLabel AWT, Swing, JavaFX & SWT 14
G linie / vektor zeichnen AWT, Swing, JavaFX & SWT 2
K Linie wird falsch auf Panel gezeichnet AWT, Swing, JavaFX & SWT 11
M JButtons mit Linie verbinden AWT, Swing, JavaFX & SWT 4
S SceneBuilder gridpane erweitern AWT, Swing, JavaFX & SWT 0
B GridPane erweitern AWT, Swing, JavaFX & SWT 0
J JavaFX Shapes (Line) erweitern AWT, Swing, JavaFX & SWT 11
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
T JXTreeTable mit Klick auf TreeNode erweitern AWT, Swing, JavaFX & SWT 12
M Swing jTable: aktuell angesehne Einträge um Infos erweitern AWT, Swing, JavaFX & SWT 7
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
D Jtable mit Dropdown Menü erweitern funktioniert nicht AWT, Swing, JavaFX & SWT 5
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
M JButton erweitern AWT, Swing, JavaFX & SWT 4
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
C JTable dynamische erweitern AWT, Swing, JavaFX & SWT 2
D JComponent erweitern AWT, Swing, JavaFX & SWT 4
H Confirm Dialog erweitern AWT, Swing, JavaFX & SWT 5
Z Swing JButton erweitern/Gridlayout AWT, Swing, JavaFX & SWT 2
J Swing Problem mit JTable erweitern AWT, Swing, JavaFX & SWT 6
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JPopupMenu - Ein vorhandenes Kontextmenü erweitern AWT, Swing, JavaFX & SWT 6
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
D JTable um eine Zeile erweitern AWT, Swing, JavaFX & SWT 4
X Maximale Zeilenanzahl einer JTable erweitern AWT, Swing, JavaFX & SWT 7
N JFrame standart buttons erweitern AWT, Swing, JavaFX & SWT 3
V JComboBox mit besonderen Funktionen erweitern AWT, Swing, JavaFX & SWT 3
E Bestehende Anwendung erweitern ->JFrame in JPanel verpack AWT, Swing, JavaFX & SWT 4
M jtable erweitern AWT, Swing, JavaFX & SWT 6
G Anwendung um Scrollpane erweitern AWT, Swing, JavaFX & SWT 2
L (jface) InputDialog erweitern. AWT, Swing, JavaFX & SWT 2
G JButton erweitern? AWT, Swing, JavaFX & SWT 17
S ToolTip erweitern bei Swing (Mehrzeilig) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben