WPF VB.Net

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Perpendicular Line" Height="300" Width="400">
  
          ClipToBounds="True" Width="270" Height="280">
        
          Point1
        
        
          Point2
        
        
          Point3
        
        
          Point4
        
      
  

//File:Window.xaml.vb
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes
Namespace WpfApplication1
  Public Partial Class PerpendicularLine
    Inherits Window
    Private line1 As Line
    Private line2 As Line
    Public Sub New()
      InitializeComponent()
      Dim rect As New Rectangle()
      rect.Stroke = Brushes.Black
      rect.Width = canvas1.Width
      rect.Height = canvas1.Height
      canvas1.Children.Add(rect)
      line1 = New Line()
      line2 = New Line()
      AddLines()
    End Sub
    Private Sub AddLines()
      Dim pt1 As New Point()
      Dim pt2 As New Point()
      pt1.X = 30
      pt1.Y = 300
      pt2.X = 100
      pt2.Y = 500
      Dim length As Double = 400
      line1 = New Line()
      line1.X1 = pt1.X
      line1.Y1 = pt1.Y
      line1.X2 = pt2.X
      line1.Y2 = pt2.Y
      line1.Stroke = Brushes.Gray
      line1.StrokeThickness = 4
      canvas1.Children.Add(line1)
      Canvas.SetLeft(tbPoint1, pt1.X)
      Canvas.SetTop(tbPoint1, pt1.Y)
      Canvas.SetLeft(tbPoint2, pt2.X)
      Canvas.SetTop(tbPoint2, pt2.Y)
      tbPoint1.Text = "Pt1(" & pt1.ToString() & ")"
      tbPoint2.Text = "Pt2(" & pt2.ToString() & ")"
      Dim v1 As Vector = pt1 - pt2
      Dim m1 As New Matrix()
      Dim pt3 As New Point()
      Dim pt4 As New Point()
      m1.Rotate(-90)
      v1.Normalize()
      v1 *= length
      line2 = New Line()
      line2.Stroke = Brushes.Gray
      line2.StrokeThickness = 4
      line2.StrokeDashArray = DoubleCollection.Parse("3, 1")
      pt3 = pt2 + v1 * m1
      m1 = New Matrix()
      m1.Rotate(90)
      pt4 = pt2 + v1 * m1
      line2.X1 = pt3.X
      line2.Y1 = pt3.Y
      line2.X2 = pt4.X
      line2.Y2 = pt4.Y
      canvas1.Children.Add(line2)
      Canvas.SetLeft(tbPoint3, pt3.X)
      Canvas.SetTop(tbPoint3, pt3.Y)
      Canvas.SetLeft(tbPoint4, pt4.X)
      Canvas.SetTop(tbPoint4, pt4.Y)
      pt3.X = Math.Round(pt3.X, 0)
      pt3.Y = Math.Round(pt3.Y, 0)
      pt4.X = Math.Round(pt4.X, 0)
      pt4.Y = Math.Round(pt4.Y, 0)
      tbPoint3.Text = "Pt3(" & pt3.ToString() & ")"
      tbPoint4.Text = "Pt4(" & pt4.ToString() & ")"
    End Sub
  End Class
End Namespace