VB获取2值图重心求点评

VB获取二值图重心求点评
今天下午为了获取骨架图形不变矩,想到先获取图形重心。然后居然根据初中学的杠杆原理构造了一条无重量的水平刚体线迭代计算骨架重心。最后好像成功了。不知道有没有错误,希望大家指点。

另存为Module1.bas文件
Attribute VB_Name = "Module1"
Option Explicit

Type WeightPoint                         '受力点的重心位置和重量
  X As Double
  Y As Double
  Weight As Long
End Type

Type LineDataStruct
  O As WeightPoint                       '返回值 'A和B 的重心位置O和重量
  
  AX1Y1 As WeightPoint                   'A点
  BX2Y2 As WeightPoint                   'B点
  AB As Double                           '线段AB的长度,A、B两点间的欧氏距离
  BO As Double                           '线段BO的长度
  
  '以下用于解直线方程
  X1EqualX2 As Boolean                   '当AX1Y1.X = BX2Y2.X时True,AB两点所在直线为 x轴值=X1,否则 y轴值=l * x轴值 + d
  l As Double                            'y轴值=l * x轴值 + d
  d As Double                            'y轴值=l * x轴值 + d
  
  '以下用于解二次方程
  a As Double
  b As Double
  c As Double
End Type

Public LineData As LineDataStruct
Public CGOfImagePoints As WeightPoint    '二值图像点阵的重心和重量

Public Sub GetWeightPointOfAAndB()
  Dim DistX As Double, DistY As Double   'A、B两点X、Y方向的街区距离
  
  DistX = LineData.BX2Y2.X - LineData.AX1Y1.X
  DistY = LineData.BX2Y2.Y - LineData.AX1Y1.Y
  LineData.AB = Sqr(DistX * DistX + DistY * DistY)
  LineData.BO = (LineData.AB * LineData.AX1Y1.Weight) / (LineData.AX1Y1.Weight + LineData.BX2Y2.Weight)
  
  If Abs(LineData.AX1Y1.X - LineData.BX2Y2.X) < 0.0000000000001 Then
    LineData.X1EqualX2 = True
    
    LineData.O.X = LineData.AX1Y1.X
    LineData.O.Y = LineData.BX2Y2.Y - Sqr(LineData.BO ^ 2 - DistX ^ 2)
  Else
    LineData.X1EqualX2 = False
    LineData.l = DistY / DistX
    LineData.d = LineData.AX1Y1.Y - LineData.l * LineData.AX1Y1.X