createStrokedShape

Status
Nicht offen für weitere Antworten.

Maver2000

Mitglied
Hallo,

ich versuche aus einer Linie ein Area mit einer Breite zu machen, um diese beispielsweise mit den Methoden contains oder intersects mit der Mouse verschieben oder Löschen zu können.

Ich habe mir dazu die folgende Klasse geschaffen.

Code:
import java.awt.*;
import java.awt.geom.*;

public class Mauer extends Area {
	
	int wandDicke;
	Shape s;

	public Mauer (int x1, int y1, int x2, int y2){
		double x1Neu = x1;
		double y1Neu = y1;
		double x2Neu = x2;
		double y2Neu = y2;
		
		Line2D.Double mauerJetzt = new Line2D.Double(x1, y1, x2, y2);
		BasicStroke mauerBasicStroke = new BasicStroke(wandDicke); 
		Shape mauerShape = createStrokedShape(mauerBasicStroke);
		this = Area(mauerShape);

	}
}

Aber irgendwie haut das überhaupt nicht hin.

Zunächst funktioniert das mit dem Anwenden von createStrokedShape nicht.

Und dann finde ich keine Methode der Superklasse um mir das Area an die aufrufende Stelle zurück zu geben.

Ich hoffe es gibt jemanden, der mir hier helfen kann. Danke im Vorraus.
 
B

Beni

Gast
createStrokedShape funktioniert nicht, weil es diese Methode schlicht und einfach in der Area nicht gibt.
this = Area(mauerShape); ist nicht möglich. "this" kann nicht neu gesetzt werden, und "Area(mauerShape)" existiert so nicht (wenn schon, müsstest du "new Area(...)") schreiben.

Ich kenn mich mit geom nicht aus, aber müsstest du hier nicht eher Shape implementieren, und dann ein neue Area mit diesem Shape machen?
 

Maver2000

Mitglied
Aber gibt es dann irgend eine Methode einer schräg/diagonal auf der Fläche liegenden Linie (Line oder Line2D) auch rechnerisch, nicht nur zu Darstellungszwecken wie mit BasicStroke, eine Dicke zu geben um beispielsweise die Methoden contains oder intersects von Shape auf diese Fläche anzuwenden und nicht nur auf die ein Punkt starke Lnie. Oder muss man sich hier über aufwendige Sinus und Cosinus Berechnungen ein Polygon in der Form eines Rechtecks schaffen.
 
B

Beni

Gast
Schnapp dir ein Formelbuch, Stichwort "hessische Normalform", und du siehst, der Abstand Punkt/Gerade ist ziemlich einfach zu berechnen.

http://mo.mathematik.uni-stuttgart.de/inhalt/aussage/aussage472/

Jede Gerade lässt sich als a*x + b*y + c = 0 darstellen (Falls 2 Punkte gegeben: Gleichungssystem mit zwei Gleichungen und 3 Unbekannten a, b, c. wähle die Zahlen so, dass a*a + b*b = 1 ).
Falls a*a + b*b = 1 ist, dann gilt Abstand = d = a*x + b*y + c für einen beliebigen Punkt (x, y)
Sonst gilt: d = (a*x+b*y+c)/sqrt( a*a+b*b )

Nix Sinus und Cosinus :wink:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben