开发者

Finding a point on a diagonal line when i have the start point and end point of the Line

Hi am looking for some help

I have a Diagonal line drawn on a picture box on my foru开发者_运维知识库m and i need to know if the user has clicked the line

I have the Start point and End Point of the Line and the mouse x,y location

So i basically need to find out if the x,y of the mouse is on the line.

can anyone help?

Thanks


Example: Line Start point (A) is (0, 0), END point (B) is (10, 5). Slope of line is therefore:

m(slope) = (y2 - y1) / (x2 - x1) 
         = (5 - 0) / (10 - 0)
         = 5 / 10
         = 0.5

To check if your point(x,y) (C) is on the line it must have the same slope from A->C and C->B. so do the same calculation again. Say point is (4, 2)

m(AC) = (2 - 0) / (4 - 0)
      = 2 / 4
      = 0.5

m(CB) = (5 - 2) / (10 - 4)
      = 3 / 6
      = 0.5

Therefore this point would be on line AB.

If point was (20, 10)

m(AC) = (10 - 0) / (20 - 0)
      = 10 / 20
      = 0.5

However:

m(CB) = (5 - 10) / (10 - 20)
      = -5 / -10
      = -0.5

Similarly if point was (2, 2)

m(AC) = (2 - 0) / (2 - 0)
      = 2 / 2
      = 1

m(CB) = (5 - 2) / (10 - 2)
      = 3 / 8
      = 0.375

So for a point to be on a line m(AB) == m(AC) == m(CB)

You may have a bit of work arounds to perform as you may not be able to get decimal values, and your line may be more than one pixel in width, but these basic principles should see you through.


Given two points, (2,4) and (-1,-2) determine the slope intercept form of the line.

1.  Determine the slope

y1-y2   4-(-2)   6
----- = ------= --- = 2 = M
x1-x2   2-(-1)   3


2. To slope intercept form using one of the original points and slope from above.

(y - y1) = m(x - x1)

(y - 4) = 2(x - 2)

y - 4 = 2x - 4

y = 2x + 0 (0 is y intercept)

y = 2x  (y = 2x + 0)  is in slope intercept form


3. To determine if a point lies on the line, plug and chug with the new point.

  new point (1,2) does y = 2x?  2 = 2(1) = true so (1,2) is on the line.
  new point (2,2) does y = 2x?  2 = 2(2) = false so (2,2) is not on the line.

In your original problem you said line, but I think you might mean line segment. If you mean the latter you will also need to verify that the new x and y are within the bounds of the given segment.

The code will look something like this

    Dim pta As Point = New Point(2, 4)
    Dim ptb As Point = New Point(-1, -2)

    Dim M As Double
    If pta.X - ptb.X <> 0 Then
        M = (pta.Y - ptb.Y) / (pta.X - ptb.X)
    End If

    '(y - pta.y) = M(x - pta.x)
    'y - pta.y = Mx - m(pta.x)
    'y  = Mx - M(pta.x) + pta.y

    Dim yIntercept As Double = (-M * pta.X) + pta.Y

    Dim ptN1 As Point = New Point(1, 2)
    Dim ptN2 As Point = New Point(2, 2)

    If ptN1.Y = (M * (ptN1.X)) + yIntercept Then
        Stop
    Else
        Stop
    End If

    If ptN2.Y = (M * (ptN2.X)) + yIntercept Then
        Stop
    Else
        Stop
    End If
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜