Mauszeiger an einer Schrägen orientieren

21/06/2011 - 19:55 von Heinz-Mario Frühbeis | Report spam
Hallo!

Bei z. Bsp. einem Rechteck:
If X > 0 And X < 5 Then
SizingCursor
Else
NormalCursor
End If

Wie aber kann man denn mal am Besten einen Sizing-Cursor an einer Schràgen
(z. Bsp. bei einem Dreieck) festmachen?

Da mir so spontan dazu nichts Brauchbares einfàllt, möchte ich hier mal
anfragen, ob ihr da mal Tipps, oder vlt. sogar Code hàttet.

Hoffnungsvoll und
mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Schmidt
22/06/2011 - 19:05 | Warnen spam
Am 21.06.2011 19:55, schrieb Heinz-Mario Frühbeis:

Bei z. Bsp. einem Rechteck:
If X > 0 And X < 5 Then
SizingCursor
Else
NormalCursor
End If

Wie aber kann man denn mal am Besten einen Sizing-Cursor an
einer Schràgen (z. Bsp. bei einem Dreieck) festmachen?

Da mir so spontan dazu nichts Brauchbares einfàllt, möchte
ich hier mal anfragen, ob ihr da mal Tipps, oder vlt. sogar
Code hàttet.



Möchtest Du an der Stelle dann einen "gedrehten"
MouseCursor anzeigen?
Das ginge dann nur über ein entspechend
pràpariertes, selbstdefiniertes "MouseIcon"
im *.cur Format.

Falls es Dir nur um das Anzeigen der normalen
"Sizing-Mousepointer" an einer "Schràge" geht -
das wàre dann "normale Geometrie" ...
z.B.: http://de.wikipedia.org/wiki/Steigung
(bzw. Vektor-Rechnung wie z.B. passend zum Problem)...
http://de.wikipedia.org/wiki/Hessesche_Normalform

Wenn ich mich recht (an einen in der alten Gruppe mal
gelaufenen Thread) erinnere, dann war Peter Fleischer
hier in der Gruppe sowas wie "der Vektor-Rechnungs-
Experte"... ;-)

Vielleicht liest der ja (noch) hier mit und haut
einfach mal locker was raus, was in der Lage ist
auf einer durch zwei Punkte definierten Linie
(x1, y1) u. (x2, y2) die Aussage zu treffen,
ob die Maus nun "links, oder rechts davon" ist
(bzw. "in einem Intervall um die Linie herum").

Falls das überhaupt das ist, was Du brauchst.

Hab gerade nochmal versucht, den entsprechenden
Thread zu finden (ging damals glaub ich um Polygone -
und ob ein Punkt im Polygon liegt, oder nicht) -
aber eine Suche auf google-groups spuckt einfach
nichts aus.

Also mein aktueller Versuch hier geht über die
(oben schon verlinkte) HNF - bin mir aber nicht sicher,
ob das die effizienteste Methode ist (jetzt mal
vom implementierenden Code her betrachtet, und
nicht "mathematisch gesehen").

'In eine Form
Option Explicit

Private x1, y1, x2, y2

Private Sub Form_Load()
AutoRedraw = True
ScaleMode = vbPixels
DrawWidth = 2

x1 = 10: y1 = 10 'Def für Punkt 1
x2 = 200: y2 = 150 'Def für Punkt 2

Line (x1, y1)-(x2, y2), vbRed
End Sub

'(x, y) beschreibt den aktuellen Punkt, dessen
'Abstand zu der Geraden gemessen werden soll, die
'durch (x1, y1) und (x2, y2) làuft
Private Function GetSignedDistance(x, y, x1, y1, x2, y2)
Dim m, n
'Ausrechnen von m, n (Geraden-Gleichung: f(x) = mx + n )
m = (y2 - y1) / (x2 - x1)
n = y1 - m * x1

'"angewandte HNF" (Ausgabe nicht wie eig. üblich mittels Abs(...))
GetSignedDistance = (m * x + n - y) / Sqr(m ^ 2 + n)
End Function

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x!, y!)
Dim D
D = GetSignedDistance(x, y, x1, y1, x2, y2)
Debug.Print D
Line (x1, y1)-(x2, y2), IIf(Abs(D) < 10, vbGreen, vbRed)
End Sub


Olaf

Ähnliche fragen