Vb.net 在“到”之间划一条线;“最大/最小值”;要点

Vb.net 在“到”之间划一条线;“最大/最小值”;要点,vb.net,gdi+,Vb.net,Gdi+,好吧,我又带着另一个脑力激荡者回来了:) 我需要在两个镜头之间画一条线,这两个镜头是最大排列 我使用下面的代码,但它在矩形角之间画线。我知道这是错误的,但不知道如何找到使用此代码的点 我对代码进行了很长时间的更新(这样我的大脑就可以对代码进行处理) 基本上,其中一个“L”变量将被测试为最长的变量。然后,我需要获取“L”变量的对应点 Private Sub DrawMaxCTCLine(g As Graphics) Dim minx, miny, maxx, maxy A

好吧,我又带着另一个脑力激荡者回来了:)

我需要在两个镜头之间画一条线,这两个镜头是最大排列

我使用下面的代码,但它在矩形角之间画线。我知道这是错误的,但不知道如何找到使用此代码的点

我对代码进行了很长时间的更新(这样我的大脑就可以对代码进行处理)

基本上,其中一个“L”变量将被测试为最长的变量。然后,我需要获取“L”变量的对应点

 Private Sub DrawMaxCTCLine(g As Graphics)
            Dim minx, miny, maxx, maxy As Integer
    Dim P1, P2, P3, P4 As Point
    Dim L1, L2, L3, L4, L5, L6 As Decimal

    maxx = shotList.Max(Function(point) point.X)
    maxy = shotList.Max(Function(point) point.Y)
    minx = shotList.Min(Function(point) point.X)
    miny = shotList.Min(Function(point) point.Y)

    P1 = shotList.Find(Function(point) point.X = maxx)
    P2 = shotList.Find(Function(point) point.Y = maxy)
    P3 = shotList.Find(Function(point) point.X = minx)
    P4 = shotList.Find(Function(point) point.Y = miny)

    L1 = Math.Sqrt((P1.X - P2.X) ^ 2 + (P1.Y - P2.Y) ^ 2)
    L2 = Math.Sqrt((P1.X - P3.X) ^ 2 + (P1.Y - P3.Y) ^ 2)
    L3 = Math.Sqrt((P1.X - P4.X) ^ 2 + (P1.Y - P4.Y) ^ 2)
    L4 = Math.Sqrt((P2.X - P3.X) ^ 2 + (P2.Y - P3.Y) ^ 2)
    L5 = Math.Sqrt((P2.X - P4.X) ^ 2 + (P2.Y - P4.Y) ^ 2)
    L6 = Math.Sqrt((P3.X - P4.X) ^ 2 + (P3.Y - P4.Y) ^ 2) 
这是我所说的这条线的更好的图像(突出显示)

这是一张仅显示两张快照的图像(有效)

这是一张显示3张或更多照片的图像(不起作用) 请注意,线绘制到左上角,而不是快照
这是我如何让它工作的,漫长的道路。对任何更简洁的东西都开放

  Private Sub DrawMaxCTCLine(g As Graphics)
    Dim minx, miny, maxx, maxy As Integer
    Dim P1, P2, P3, P4 As Point
    Dim L1, L2, L3, L4, L5, L6 As Decimal
    Dim maxSpread As Decimal = 0

    maxx = shotList.Max(Function(point) point.X)
    maxy = shotList.Max(Function(point) point.Y)
    minx = shotList.Min(Function(point) point.X)
    miny = shotList.Min(Function(point) point.Y)

    P1 = shotList.Find(Function(point) point.X = maxx)
    P2 = shotList.Find(Function(point) point.Y = maxy)
    P3 = shotList.Find(Function(point) point.X = minx)
    P4 = shotList.Find(Function(point) point.Y = miny)

    L1 = Math.Sqrt((P1.X - P2.X) ^ 2 + (P1.Y - P2.Y) ^ 2)
    L2 = Math.Sqrt((P1.X - P3.X) ^ 2 + (P1.Y - P3.Y) ^ 2)
    L3 = Math.Sqrt((P1.X - P4.X) ^ 2 + (P1.Y - P4.Y) ^ 2)
    L4 = Math.Sqrt((P2.X - P3.X) ^ 2 + (P2.Y - P3.Y) ^ 2)
    L5 = Math.Sqrt((P2.X - P4.X) ^ 2 + (P2.Y - P4.Y) ^ 2)
    L6 = Math.Sqrt((P3.X - P4.X) ^ 2 + (P3.Y - P4.Y) ^ 2)

    Dim lList As New List(Of Decimal)
    lList.Add(L1)
    lList.Add(L2)
    lList.Add(L3)
    lList.Add(L4)
    lList.Add(L5)
    lList.Add(L6)

    maxSpread = lList.Max()

    Dim pn As New Pen(My.Settings.Max_Spread_Line, 1)
    Dim Dash As Single() = {2, 5, 2, 5}

    pn.DashPattern = Dash

    Select Case maxSpread
        Case L1
            g.DrawLine(pn, P1, P2)
        Case L2
            g.DrawLine(pn, P1, P3)
        Case L3
            g.DrawLine(pn, P1, P4)
        Case L4
            g.DrawLine(pn, P2, P3)
        Case L5
            g.DrawLine(pn, P2, P4)
        Case L6
            g.DrawLine(pn, P3, P4)
    End Select

    pn.Dispose()
    lList.Clear()

    Console.WriteLine("P1" & P1.ToString & vbCrLf & "P2" & P2.ToString & vbCrLf & "P3" & P3.ToString & vbCrLf & "P4" & P4.ToString)
    Console.WriteLine(L1.ToString & vbCrLf & L2.ToString & vbCrLf & L3.ToString & vbCrLf & L4.ToString & vbCrLf & L5.ToString & vbCrLf & L6.ToString)
    Console.WriteLine(maxSpread)

End Sub

这是我如何让它工作的,漫长的路。对任何更简洁的东西都开放

  Private Sub DrawMaxCTCLine(g As Graphics)
    Dim minx, miny, maxx, maxy As Integer
    Dim P1, P2, P3, P4 As Point
    Dim L1, L2, L3, L4, L5, L6 As Decimal
    Dim maxSpread As Decimal = 0

    maxx = shotList.Max(Function(point) point.X)
    maxy = shotList.Max(Function(point) point.Y)
    minx = shotList.Min(Function(point) point.X)
    miny = shotList.Min(Function(point) point.Y)

    P1 = shotList.Find(Function(point) point.X = maxx)
    P2 = shotList.Find(Function(point) point.Y = maxy)
    P3 = shotList.Find(Function(point) point.X = minx)
    P4 = shotList.Find(Function(point) point.Y = miny)

    L1 = Math.Sqrt((P1.X - P2.X) ^ 2 + (P1.Y - P2.Y) ^ 2)
    L2 = Math.Sqrt((P1.X - P3.X) ^ 2 + (P1.Y - P3.Y) ^ 2)
    L3 = Math.Sqrt((P1.X - P4.X) ^ 2 + (P1.Y - P4.Y) ^ 2)
    L4 = Math.Sqrt((P2.X - P3.X) ^ 2 + (P2.Y - P3.Y) ^ 2)
    L5 = Math.Sqrt((P2.X - P4.X) ^ 2 + (P2.Y - P4.Y) ^ 2)
    L6 = Math.Sqrt((P3.X - P4.X) ^ 2 + (P3.Y - P4.Y) ^ 2)

    Dim lList As New List(Of Decimal)
    lList.Add(L1)
    lList.Add(L2)
    lList.Add(L3)
    lList.Add(L4)
    lList.Add(L5)
    lList.Add(L6)

    maxSpread = lList.Max()

    Dim pn As New Pen(My.Settings.Max_Spread_Line, 1)
    Dim Dash As Single() = {2, 5, 2, 5}

    pn.DashPattern = Dash

    Select Case maxSpread
        Case L1
            g.DrawLine(pn, P1, P2)
        Case L2
            g.DrawLine(pn, P1, P3)
        Case L3
            g.DrawLine(pn, P1, P4)
        Case L4
            g.DrawLine(pn, P2, P3)
        Case L5
            g.DrawLine(pn, P2, P4)
        Case L6
            g.DrawLine(pn, P3, P4)
    End Select

    pn.Dispose()
    lList.Clear()

    Console.WriteLine("P1" & P1.ToString & vbCrLf & "P2" & P2.ToString & vbCrLf & "P3" & P3.ToString & vbCrLf & "P4" & P4.ToString)
    Console.WriteLine(L1.ToString & vbCrLf & L2.ToString & vbCrLf & L3.ToString & vbCrLf & L4.ToString & vbCrLf & L5.ToString & vbCrLf & L6.ToString)
    Console.WriteLine(maxSpread)

End Sub

你说的是白色虚线还是红色虚线?现在还不清楚从你的照片中会发生什么。此外,您正在泄漏GDI对象。当你用完你的
笔时,你需要把它扔掉。白色虚线,对不起,我可以看出这是多么的不清楚。谢谢你抓住了漏水的地方。没有注意到。虚线应该从哪里画出来?我认为问题在于
minx
miny
不属于同一点
minx
似乎属于快照1,而
miny
属于快照3我正在编写代码,但我的想法是得到4分,分别是minx、miny、maxX、maxY。找到每个点之间的距离,并获取最大距离。假设这是正确的方法,我现在必须弄清楚怎么做。你说的是白色虚线还是红色虚线?现在还不清楚从你的照片中会发生什么。此外,您正在泄漏GDI对象。当你用完你的
笔时,你需要把它扔掉。白色虚线,对不起,我可以看出这是多么的不清楚。谢谢你抓住了漏水的地方。没有注意到。虚线应该从哪里画出来?我认为问题在于
minx
miny
不属于同一点
minx
似乎属于快照1,而
miny
属于快照3我正在编写代码,但我的想法是得到4分,分别是minx、miny、maxX、maxY。找到每个点之间的距离,并获取最大距离。假设这是正确的方法,我现在必须想办法做到这一点。