# Kreis erkennen...



## tomovic (13. Jul 2014)

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?


----------



## Topfpflanze (13. Jul 2014)

Bei der Fläche

A= pi * r * r


----------



## tomovic (13. Jul 2014)

sehr witzig.:noe:

dafür für die Antwort hättest du 100 Punkte bekommen,

```
drawCirle(....);
```


oder dafür ?!?

```
public boolean onTouchEvent(MotionEvent event) {
```

Aber wie sieht die if Abfage aus in onTouchEvent ?


----------



## Tobse (13. Jul 2014)

Topfpflanze hat gesagt.:


> Bei der Fläche
> 
> A= pi * r * r



Wirklich, sehr geistreich...


@TE:

```
x
```
 und 
	
	
	
	





```
y
```
 sind jetzt mal die Koordinaten des oberen Linken Punktes des Quadrats, welches den Kreis einschließt (also ist der Mittelpunkt bei (
	
	
	
	





```
x + 2cm | y + 2cm)
```
)
Ob ein Punkt P im Quadrat liegt, ist relativ einfach geprüft:

```
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.


----------



## tomovic (16. Jul 2014)

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 (16. Jul 2014)

Tobse hat gesagt.:


> Wirklich, sehr geistreich...
> 
> 
> @TE:
> ...



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 (18. Jul 2014)

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 (18. Jul 2014)

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

Gruss

Claus


----------



## Tobse (18. Jul 2014)

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.

```
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 
	
	
	
	





```
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:


Thallius hat gesagt.:


> 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.


----------



## eMmiE (20. Jul 2014)

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 (20. Jul 2014)

eMmiE hat gesagt.:


> 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.


----------



## tomovic (20. Jul 2014)

werde dann mal in die Schule gehen.


----------

