Kreis erkennen...

tomovic

Bekanntes Mitglied
hallo,
ich erstelle einen Kreis,Druchmesser 4 cm. Das ist aber nicht das Problem.
Mein Ziel ist:
ich meine einen Touch auf den Kreis und es soll eine Funktion ausgeführt werden. Das Endziel:
ich kann den Kreis auf dem Display verschieben.

Wie Wo solle ich ansetzen?
 

tomovic

Bekanntes Mitglied
sehr witzig.:noe:

dafür für die Antwort hättest du 100 Punkte bekommen,
Java:
drawCirle(....);


oder dafür ?!?
Java:
public boolean onTouchEvent(MotionEvent event) {

Aber wie sieht die if Abfage aus in onTouchEvent ?
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Bei der Fläche

A= pi * r * r

Wirklich, sehr geistreich...


@TE:
Code:
x
und
Code:
y
sind jetzt mal die Koordinaten des oberen Linken Punktes des Quadrats, welches den Kreis einschließt (also ist der Mittelpunkt bei (
Code:
x + 2cm | y + 2cm)
)
Ob ein Punkt P im Quadrat liegt, ist relativ einfach geprüft:
Java:
if (P.x >= x && P.x <= x + 4 && P.y >= y && P.y <= y + 4)

Wenn das klar ist, kannst du den X-Abtsand von P zum Kreismittlepunkt errechnen. Der Sinus des Ergebnisses ist dann ein "Hinweis" auf die Grenzwerte für die Y-Koordinate von P.
 
Zuletzt bearbeitet:

tomovic

Bekanntes Mitglied
danke,
letzte Frage:
wie sieht es aus mit einer Linie, ich tippe Sie an und es wird eine Funktion ausgeführt ?
Meine Idee :
Punkt A und Punkt B über die Winkelberechnung ?
 

JCODA

Top Contributor
Wirklich, sehr geistreich...


@TE:
Code:
x
und
Code:
y
sind jetzt mal die Koordinaten des oberen Linken Punktes des Quadrats, welches den Kreis einschließt (also ist der Mittelpunkt bei (
Code:
x + 2cm | y + 2cm)
)
Ob ein Punkt P im Quadrat liegt, ist relativ einfach geprüft:
Java:
if (P.x >= x && P.x <= x + 4 && P.y >= y && P.y <= y + 4)

Wenn das klar ist, kannst du den X-Abtsand von P zum Kreismittlepunkt errechnen. Der Sinus des Ergebnisses ist dann ein "Hinweis" auf die Grenzwerte für die Y-Koordinate von P.

Sorry, aber

sei M der Kreis, P der geklickte Punkt, eine Abstandberechnung ist dank Pythagoras sehr einfach:

dx := M.x-P.x
dy := M.y-P.y
dist^2 := dx^2+dy^2

falls nun dist^2<=r^2 so hat man in den Kreis geklickt. andernfalls außerhalb.
 

tomovic

Bekanntes Mitglied
danke für den Tipp.
Aber meine Frage ist:

Ich tippe 2 mal aufs Display und habe ich eine Line.

1:
x=20
y=30

2:
x=200
y=201

Dann tippe zum dritten mal.

3.
x=100
y=100
Habe ich jetzt die Line angetippt oder nicht?
 

Thallius

Top Contributor
Sorry, aber das ist simpelster Dreisatz. Das solltest du spätestens seit der 5. Klasse problemlos lösen können.

Gruss

Claus
 

Tobse

Top Contributor
Erstes Touch-Event liefert den Punkt [c]A(x_a|y_a)[/c] und das zweite liefert den Punkt [c]B(x_b|y_b)[/c]. Dann verläuft zwischen diesen beiden Punkte eine Gerade welche sich durch eine Lineare funktion der Form [c]f(x)=mx+c[/c] ausdrücken lässt.
Code:
m = (y_b - y_a) / (x_b - x_a)    [Steigungsdreieck]

Bedingung: f(x_a) = y_a
Gesucht: c

m * x_a + c = y_a           | - (m * x_a)
          c = y_a - m * x_a

Jetzt kommt Touch-Event 3 und liefert
Code:
C(x_c|y_c)
. C liegt auf der Geraden durch A und B wenn C auf f(x) liegt, sprich [c]Bedingung: f(x_c) = y_c[/c]

EDIT:
Sorry, aber das ist simpelster Dreisatz. Das solltest du spätestens seit der 5. Klasse problemlos lösen können.

Gruss

Claus
Nein, das ist kein Dreisatz. Das ist zweidimensionale Geometrie und kommt am Gymnasium in der 7. Klasse dran. Dennoch - eigentlich basics.
 
Zuletzt bearbeitet:

eMmiE

Bekanntes Mitglied
Dann müsste aber der Punkt, wo du hingeklickt hast EXAKT auf der Linie liegen, da aber ein gewisser fehlerwert sicher nicht falsch ist zu berücksichtigen, solltest du besser den Abstand Punkt-Gerade (Lotfußpunktverfahren) anwenden

Bei dem Abstand überprüfst du dann einfach, ob er unter dem Fehlerwert (Daumendurchmesser, wasweisich) liegt und du bekommst heraus, ob der Kreis die Linie schneidet (Mathe Klasse 11/12)

Gruß eMmiE
 

Tobse

Top Contributor
Dann müsste aber der Punkt, wo du hingeklickt hast EXAKT auf der Linie liegen
Danach hat er gefragt :O

da aber ein gewisser fehlerwert sicher nicht falsch ist zu berücksichtigen, solltest du besser den Abstand Punkt-Gerade (Lotfußpunktverfahren) anwenden

Bei dem Abstand überprüfst du dann einfach, ob er unter dem Fehlerwert (Daumendurchmesser, wasweisich) liegt und du bekommst heraus, ob der Kreis die Linie schneidet (Mathe Klasse 11/12)

Den Lotfußpunkt zu berechnen und dann den Abstand zu ermitteln ist jetzt wirklich nicht ohne für jemaden, der bei einer Punktprobe im Kreis schon nicht erfolgreich war... meinst du es macht Sinn, das jetzt zu erklären? Mir persönlich wäre der Aufwand da etwas überdimensioniert.
 

Ähnliche Java Themen

Neue Themen


Oben