Bitmap per Touch markieren

  • Antworten:4
Duckemai
  • Forum-Beiträge: 63

13.04.2011, 11:52:11 via Website

Hallo zusammen,

ich möchte gerne eine Bitmap per Touchscreen markieren.
Dafür errechne ich die Lage der (waagerechten) viereckigen Bitmap wie folgt:

float BitmapXRangeEnd = BitmapXRangeStart + width;
float BitmapYRangeEnd = BitmapYRangeStart + height;
...

//Es wurde genau auf ein Bitmap gedrückt:
if (((BitmapXRangeStart < (int) event.getX()) && (BitmapXRangeEnd > (int) event.getX())) &&
((BitmapYRangeStart < (int) event.getY() && BitmapYRangeEnd > (int) event.getY()))){
...//markiere Bitmap

Doch diese Berechnung geht nun nicht mehr, nachdem ich rotate() angewendet habe, da die Bitmap nun nicht mehr waagerecht liegt, sondern durch das Drehen um die x/y-Koordinate (oben links) nun schräg liegt.

Gibt es eine Formel oder Methode, wie ich berechnen kann, wo genau die Kanten der nun 'schief' liegenden Bitmap verlaufen, damit ich daraus errechnen kann, welche Pixel sich unter der Bitmap befinden? Nur so kann
ich berechnen, ob eine Berührung des Bildschirms auch wirklich auf der Bitmap erfolgte.

Vielen Dank!

Antworten
Leo K.
  • Forum-Beiträge: 56

13.04.2011, 21:43:32 via Website

wenn ich dich reichtig verstanden habe, dann könnte dir das weiterhelfen:


die berechnung kannst du für jeden gewünscgten punkt machen, also auch für deinen neuen Eckpunkte...

naja und wenns nicht hilft, dann nicht :grin:

lg Leo

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

14.04.2011, 09:08:04 via Website

Das könnte mir tatsächlich helfen.

Leider ist meine letzte Mathestunde schon etwas her.
Ich habe mal versucht die Koordinate für B' (so nennt man das glaube ich) mittels Deiner Formel
zu berechnen. Das Ergebnis ist aber falsch. Kannst Du bitte mal drüberschauen, ob ich die Werte falsch benutzt habe?

Bsp Rechteck (x/y):
A = 2/2
B = 6/2
C = 6/4
D = 2/4

Drehung um 32 Grad (im Uhrzeigersinn)

A ist immer gleich A' (Drehpunkt)
---
B'
delta y ist gleich: 4 * sin 32 = 2,1 //die 4 habe ich aus 6-2
delta x ist gleich: 2,1 * tan 32 = 1,3

B' x = 2 + 2,1 = 4,1 //die 2 ist die Ax-Koordinate
B' y = 2 + 1,3 = 3,3 //die 2 ist die Ay-Koordinate

Dann wäre B' = 4,1/3,3 . Ich habe es in ein Koordiantenkreuz gezeichnet. Das kommt aber nicht hin.

— geändert am 14.04.2011, 09:37:46

Antworten
Leo K.
  • Forum-Beiträge: 56

14.04.2011, 11:40:34 via Website

Hi ich hab nochmal gerechnet, nei mir kommt für B'(4,01|5,17) raus
d = delta
dy=6*sin(32°)=~3,17
dx=3,17*tan(32°)=~1,99

neue x und y coordinaten
X=Xalt-dx=6-1,99=4,01 ..minus weil x ja nach links verschoben wird...
Y=Yalt+dy=2+3,17=5,17

=> B'(4,01|5,17)

schua mal ob das stimmt...

— geändert am 14.04.2011, 18:09:18

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

14.04.2011, 14:42:46 via Website

Super!
Da habe ich mich nur verrechnet.

Vielen, vielen Dank!

Antworten