Point X, voorbij Line?

Status
Niet open voor verdere reacties.

SuperABC

Gebruiker
Lid geworden
16 jul 2009
Berichten
327
Hi,

Ik heb een panel of wat dan ook.
Code:
Point X = New Point(e.X,e.Y)
Als ik een rechte horizontale Line teken in de paint_event, is het niet bepaald moeilijk om na te gaan of X boven of onder de lijn is. Nu teken ik een schuine (rechte) lijn, hoe weet ik dan of X boven of onder de lijn is? En wanneer ik een een Curve teken?
 
Een rechte (schuine) lijn is al gelukt:

Code:
Public Class Form1

    Public Function IsUnderLine(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer, ByVal xm As Integer, ByVal ym As Integer, Optional ByVal Line_With As Integer = 1) As Boolean
        Dim a, b As Integer
        'y = ax + b

        b = y1

        Dim v1 As Integer = x2 - x1
        Dim v2 As Integer = y2 - y1

        a = v2 / v1

        If (((a * xm) + b)) - (Line_With * 2) < (ym - Line_With) Then
            Return True
        Else
            Return False
        End If

    End Function

    Private Sub Panel1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
        If IsUnderLine(0, 0, 200, 200, e.X, e.Y, 10) Then
            Me.Text = "Onder de lijn"
        Else
            Me.Text = "Boven de lijn"
        End If
    End Sub

    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        'e.Graphics.DrawLine(Pens.Black, 0, 200, 200, 0)
        Dim pn As New Pen(Color.Black, 10)
        e.Graphics.DrawLine(pn, 0, 0, 200, 200)
    End Sub
End Class

Als het op de lijn is wordt ook False, Returned
 
Laatst bewerkt:
Nu teken ik een Curve:

Code:
        Dim point(3) As Point
        point(0) = New Point(0, 0)
        point(1) = New Point(100, 100)
        point(2) = New Point(300, 0)
        point(3) = New Point(400, 100)

        e.Graphics.DrawCurve(Pens.Black, point)
Echter lijkt het me dan het handigts per lijn stuk te kijken of het erboven of eronder is...
Dus eerst bekijken we:
Code:
        point(0) = New Point(0, 0)
        point(1) = New Point(100, 100)
Daarna:
Code:
        point(1) = New Point(100, 100)
        point(2) = New Point(300, 0)
etc.
Het enigste wat ik wil weten is, welke formule er achter de lijn zit, bij een rechte lijn is het altijd(?): y = ax + b. Maar bij gebogen lijnen zoals hierboven beschreven zijn er veel meer vormen van formules mogelijk. Is er een standaard forumule welke de lijn beschrijft? Zodat ik daarna de formule kan invullen?
 
Het hangt ervan af wat DrawCurve precies doet.
http://msdn.microsoft.com/en-us/library/system.drawing.graphics.drawcurve(VS.71).aspx

In dat linkje vertellen ze niet hoe DrawCurve precies werkt.

Maar als Drawcurve alleen maar op het visuele een vloeiende curve trekt door een aantal willekeurig geplaatste punten heen,
dan denk ik niet dat je zomaar de wiskundige formule kunt bepalen.

De kans dat het toevallig een circel of een parabool of een ellips is, is oneindig klein.

Dus het wordt een ingewikkeld verhaal.
 
Msschien is een DrawArc nog wel beter? Is er niet net zoals bij een rechte lijn (linear) iets voor een lijn die zou lopen volgens een kwadratische formule? Zodat je de formule kunt berekenen aangezien je toch vrijveel informatie hebt over het verloop van de lijn...
 
Er staat me iets van bij, maar ik kan het even niet checken:
Als je drie punten vastlegt dan kun je altijd een kwadratische formule vinden die voldoet.
Leg je vier punten vast, dan kun je altijd een derdemachts formule vinden die voldoet
... etc
 
Drie punten zijn in principe ook altijd beschikbaar:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan