Prüfung ob Linie von Rechteck erfasst wird

25/11/2007 - 00:10 von Robert Hauffe | Report spam
Hallo,

ich möchte Abfragen ob eine Linie von einem Rechteck erfasst wird.

Mein erster Gedanke dazu war, die Linie durch ein rotiertes Rechteck
auszudrücken und dann die Abfrage per IntersectsWith durchzuführen.
Allerdings habe ich bisher keine Möglichkeit gefunden Rectangle zu
rotieren (das Rechteck soll nicht gezeichnet werden). Gibt es diese
Möglichkeit überhaupt?

Ich hab auch schon mal mit Region geliebàugelt, aber hier liefert
Intersect ja nichts zurück.

Alternativ fàllt mir jetzt nur noch die Schnittpunktberechnung der Linie
mit den vier Seiten des Rechtecks ein.

Gibt es sonst noch Möglichkeiten in VB die Erfassung einer Linie durch
ein Rechteck zu prüfen?

Robert
 

Lesen sie die antworten

#1 Karsten Sosna
25/11/2007 - 10:18 | Warnen spam
ich möchte Abfragen ob eine Linie von einem Rechteck erfasst wird.

Mein erster Gedanke dazu war, die Linie durch ein rotiertes Rechteck
auszudrücken und dann die Abfrage per IntersectsWith durchzuführen.
Allerdings habe ich bisher keine Möglichkeit gefunden Rectangle zu
rotieren (das Rechteck soll nicht gezeichnet werden). Gibt es diese
Möglichkeit überhaupt?

Ich hab auch schon mal mit Region geliebàugelt, aber hier liefert
Intersect ja nichts zurück.

Alternativ fàllt mir jetzt nur noch die Schnittpunktberechnung der Linie
mit den vier Seiten des Rechtecks ein.

Gibt es sonst noch Möglichkeiten in VB die Erfassung einer Linie durch ein
Rechteck zu prüfen?



Hallo Robert,
wie wàre es hiermit:
\\\
Using G as Graphics = Me.CreateGraphics
Using GP As New GraphicsPath
'Hier ist die Linie
GP.AddLine(New Point(10, 10), New Point(100, 100))
Using pen As New Pen(Drawing.Color.Black, 0)
GP.Widen(pen)
Using REG As New Region(GP)
'Und hier das Rechteck
REG.Intersect(New Rectangle(10, 10, 10, 10))
Console.WriteLine(REG.IsEmpty(G))
End Using
End Using
End Using
End Using
///
Solltest Du keine grafische Oberflàche haben, bspw. in einer Klasse die
nicht von Control erbt, musst Du Dir temporàr eine beschaffen:
\\\
Using CTL As New Control
Using G As Graphics = CTL.CreateGraphics
Using GP As New GraphicsPath
'Hier ist die Linie
GP.AddLine(New Point(10, 10), New Point(100, 100))
Using pen As New Pen(Drawing.Color.Black, 0)
GP.Widen(pen)
Using REG As New Region(GP)
'Und hier das Rechteck
REG.Intersect(New Rectangle(10, 10, 10, 10))
Console.WriteLine(REG.IsEmpty(G))
End Using
End Using
End Using
End Using
End Using
///
Gruß Scotty

Ähnliche fragen