usingMaths.com
From Theory to Practice - Math You Can Use.







<< PreviousNext >>

Detecting Straight Line Regions in VB.Net | Detect Crossing & Region Division Tutorial



Detecting Regions Divided by a Diagonal Line | Maths Explanation for VB.Net Kids

In this tutorial, you'll learn how to detect when an object crosses a straight line in VB.Net. We'll explore how to check which side of a line a point lies on, and how to apply this logic to a VB.Net canvas animation.

When working with graphics or simulations in VB.Net, you might need to check which side of a line a ball or object is on. This technique is common in VB.Net canvas collision detection and helps define regions divided by a line.

Consider a moving body (circle). When it moves across a diagonal straight line, we can perform an action - such as changing the ball's colour - after it crosses from one region to another.

VB.Net diagram showing object crossing a straight line region
Figure: VB.Net diagram showing object crossing a straight line region


Understanding the Straight Line Equation in VB.Net

We use the slope-intercept formula (y = mx + c) to define boundaries for region detection in VB.Net.

To implement straight line region detection, we'll compare the ball's x-position with the position of the line at the same y-coordinate, using the line equation in VB.Net.
If the ball's midpoint is (xb, yb) and the line at that height is (xl, yl), then:
         xl = myd + c
The ball crosses the line when: xd >= xl.

VB.Net straight line region diagram showing object coordinates for line detection
Figure: VB.Net straight line region diagram showing object coordinates for line detection

This logic uses the line equation in VB.Net to check when an object moves from one region to another.
This can also help with collision detection and boundary demarcation in VB.Net graphics or HTML canvas.

VB.Net Code: Detecting Line Crossing in Canvas

To determine which side of a diagonal boundary a point belongs to, we use a simple line equation. This VB.Net example demonstrates line region detection using the slope-intercept method.

Create a new Visual Basic Windows Forms Application project ; call it Dymetric_VB.
Create 3 new VB.Net classes;
Call them Facet, Dymetric and StraightLineRegion.
Type out the adjoining VB.Net code for detecting the instance a travelling body crosses the path of a straight line.
This VB.Net line crossing detection example changes the ball's colour once it moves across the line.


Summary: Detecting Line Boundaries with VB.Net

You've learned how to use the line equation in VB.Net to **detect regions divided by a straight line and trigger actions when objects cross the line**. This simple logic forms the foundation of VB.Net graphics and animation algorithms.

By now, you can use VB.Net to detect when an object crosses a straight line and determine which region it belongs to. This simple mathematical approach is useful for animations, physics simulations, and canvas line region detection.

Applying the Line Region Detection Logic in VB.Net

This tutorial teaches you to:

  • Detect when a ball crosses a straight or diagonal line.
  • Identify which side of a line a point lies on.
  • Create interactive VB.Net canvas projects with region-based logic.

You can extend this principle to handle collision detection, line-segment intersection, or more complex 2D graphics region detection.



So! VB.Net Fun Practice Exercise - Detect Straight Line Boundary

As a fun practice exercise, try modifying the VB.Net code to explore different coordinates and intercepts. This will be a great way to connect mathematics and programming, and help you understand more about VB.Net animations and linear boundaries.







VB.Net Straight Line Boundary Window Display Code Stub

Public Class Form1

    Private form_details As New Facet
    Private action_class As New Dymetric

    Private Sub Form1_Load(sender As Object, e As EventArgsHandles MyBase.Load
        ' Fill in Form - Put button on form
        form_details.formFeatures(sender)
    End Sub

    Private Sub Form1_Paint(sender As Object, e As PaintEventArgsHandles Me.Paint
        ' Colour button area
        form_details.decorateButtonArea(sender, e)

        ' Call MovingBody class into action
        action_class.decideAction(sender, Me.CreateGraphics(), form_details.CLICK_OCCURRED)

        ' Reset click variable
        form_details.CLICK_OCCURRED = False
    End Sub
End Class

VB.Net Straight Line Boundary Facet Window Code Stub

Public Class Facet

    Dim screen_rect As Rectangle
    Public CLICK_OCCURRED As Boolean = False

    Public Sub formFeatures(sender As Object)
        'Set window position, width and height
        screen_rect = Screen.PrimaryScreen.Bounds
        sender.SetDesktopBounds(0, 0, screen_rect.Width, screen_rect.Height)

        ' Set a display text
        sender.Text = "useOfMaths.com"

        ' Set a background colour
        sender.BackColor = System.Drawing.Color.LightGray

        ' Set an icon image
        Dim path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
        path = New Uri(path).LocalPath
        Try
            sender.Icon = New Icon(path & "\useOfMaths.ico")
        Catch ex As System.IO.FileNotFoundException
            ' Well, just go on and use default pic
        End Try

        '
        'create a button - response_btn
        '
        Dim response_btn As New Button()
        response_btn.BackColor = System.Drawing.Color.Magenta
        response_btn.ForeColor = System.Drawing.Color.Blue
        response_btn.Name = "response_btn"
        response_btn.SetBounds(CInt(Math.Round(screen_rect.Width / 2)) - 50, 5, 100, 40)
        response_btn.Text = "Move"
        sender.Controls.Add(response_btn)
        AddHandler response_btn.Click, AddressOf response_btn_Click
    End Sub

    Public Sub decorateButtonArea(sender As Object, e As PaintEventArgs)
        ' Draw a dotted line
        Dim pencil As New System.Drawing.Pen(System.Drawing.Color.Black)
        pencil.DashStyle = Drawing2D.DashStyle.DashDot
        pencil.Width = 5
        e.Graphics.DrawLine(pencil, 0, 50, sender.Width, 50)
        pencil.Dispose()

        ' Colour region
        Dim paint_brush As New System.Drawing.SolidBrush(System.Drawing.Color.Pink)
        e.Graphics.FillRectangle(paint_brush, 0, 0, sender.Width, 50)
        paint_brush.Dispose()
    End Sub

    Public Sub response_btn_Click(sender As Object, e As EventArgs)
        ' turn this on on every button click
        CLICK_OCCURRED = True
        sender.Refresh()
    End Sub
End Class

VB.Net Straight Line Boundary Code for Dymetric class

Public Class Dymetric
    Private line_region As New StraightLineRegion
    Private do_simulation = False

    ' decide what course of action to take
    Public Sub decideAction(sender As Object, g As Graphics, click_check As Boolean)
        If do_simulation And click_check Then
            ' do animation
            line_region.play(sender, g)
            do_simulation = False
        Else
            ' Put ball on screen
            line_region.prep(sender, g)
            do_simulation = True
        End If
    End Sub
End Class

VB.Net Animation Code for Straight Line Region class

Public Class StraightLineRegion

    ' ball coordinates
    Private x_ball, y_ball As Integer
    Private previous_x As Integer = 0
    Private previous_y As Integer = 0
    Private Const ballDIAMETER = 80
    ' line variables
    Private x1, y1, x2, y2 As Integer
    Private m, c As Double
    Private x_line As Double

    Dim ball_colour As New System.Drawing.SolidBrush(System.Drawing.Color.Yellow)
    Dim bg_colour As New System.Drawing.SolidBrush(System.Drawing.Color.LightGray)

    ' draw first appearance of ball on the screen
    Public Sub prep(sender As Object, g As Graphics)
        x_ball = 10
        y_ball = Math.Round(sender.Height / 2)
        ball_colour = New System.Drawing.SolidBrush(System.Drawing.Color.Yellow)

        x1 = Math.Round(sender.Width / 2) - 100
        y1 = 70
        x2 = Math.Round(sender.Width / 2) + 100
        y2 = sender.Height - 50

        m = (y2 - y1) / (x2 - x1) ' slope
        c = (x2 * y1 - x1 * y2) / (x2 - x1) ' y-intercept

        ' Point where ball will cross line
        x_line = (y_ball - c) / m

        ' draw line
        g.DrawLine(Pens.Black, x1, y1, x2, y2)

        If previous_x > 0 Then
            ' clear previous ball using background colour
            g.FillEllipse(bg_colour, previous_x, previous_y, ballDIAMETER, ballDIAMETER)
        End If
        ' draw ball
        g.FillEllipse(ball_colour, x_ball, y_ball, ballDIAMETER, ballDIAMETER)
        previous_x = x_ball
        previous_y = y_ball
    End Sub

    ' repetitively clear and draw ball on the screen - Simulate motion
    Public Sub play(sender As Object, g As Graphics)
        ' condition for continuing motion
        Do While x_ball < sender.Width - ballDIAMETER
            If x_ball >= x_line Then
                ' change colour as ball crosses line
                ball_colour = New System.Drawing.SolidBrush(System.Drawing.Color.Green)
            End If

            ' clear previous ball using background colour
            g.FillEllipse(bg_colour, previous_x, previous_y, ballDIAMETER, ballDIAMETER)
            ' redraw ball
            g.FillEllipse(ball_colour, x_ball, y_ball, ballDIAMETER, ballDIAMETER)

            previous_x = x_ball
            x_ball += 10
            ' take a time pause
            Threading.Thread.Sleep(50)
        Loop
    End Sub
End Class





<< PreviousNext >>