KevinBarnett
2004-07-09, 06:47 AM
Greetings Gang,
I needed a function to find a point at a specific distance between two points and wrote the included code. Can the code be reduced/improved? Is there a quicker method to do this?
TIA,
Kevin.
Public Function PntByVector(FromPnt As Variant, ToPnt As Variant, VDist As Double) _
As Variant
Dim DDist As Double 'direct distance
DDist = ADistance(FromPnt, ToPnt)
If VDist > DDist Then
'send error back... ???
Exit Function
End If
Dim FDist As Double 'flat distance
Dim BDist As Double 'flat eq of req. dist
Dim Ang As Double
Dim Pnt As Variant
If (ToPnt(2) - FromPnt(2)) <> 0 Then
FDist = Sqr((DDist ^ 2) - ((ToPnt(2) - FromPnt(2)) ^ 2))
Ang = Atn((ToPnt(2) - FromPnt(2)) / FDist)
BDist = Cos(Ang) * VDist
Pnt = ThisDrawing.Utility.PolarPoint(FromPnt, _
ThisDrawing.Utility.AngleFromXAxis(FromPnt, ToPnt), BDist)
Pnt(2) = Pnt(2) + (Sin(Ang) * VDist)
PntByVector = Pnt
Else
Pnt = ThisDrawing.Utility.PolarPoint(FromPnt, _
ThisDrawing.Utility.AngleFromXAxis(FromPnt, ToPnt), VDist)
PntByVector = Pnt
End If
End Function
Public Function ADistance(P1 As Variant, P2 As Variant) As Double
Dim x, Y, Z As Double
x = P1(0) - P2(0)
Y = P1(1) - P2(1)
If UBound(P1) > 1 And UBound(P2) > 1 Then
Z = P1(2) - P2(2)
ADistance = Abs(Sqr((Sqr((x ^ 2) + (Y ^ 2)) ^ 2) + (Z ^ 2)))
Else
ADistance = Abs(Sqr((x ^ 2) + (Y ^ 2)))
End If
End Function
I needed a function to find a point at a specific distance between two points and wrote the included code. Can the code be reduced/improved? Is there a quicker method to do this?
TIA,
Kevin.
Public Function PntByVector(FromPnt As Variant, ToPnt As Variant, VDist As Double) _
As Variant
Dim DDist As Double 'direct distance
DDist = ADistance(FromPnt, ToPnt)
If VDist > DDist Then
'send error back... ???
Exit Function
End If
Dim FDist As Double 'flat distance
Dim BDist As Double 'flat eq of req. dist
Dim Ang As Double
Dim Pnt As Variant
If (ToPnt(2) - FromPnt(2)) <> 0 Then
FDist = Sqr((DDist ^ 2) - ((ToPnt(2) - FromPnt(2)) ^ 2))
Ang = Atn((ToPnt(2) - FromPnt(2)) / FDist)
BDist = Cos(Ang) * VDist
Pnt = ThisDrawing.Utility.PolarPoint(FromPnt, _
ThisDrawing.Utility.AngleFromXAxis(FromPnt, ToPnt), BDist)
Pnt(2) = Pnt(2) + (Sin(Ang) * VDist)
PntByVector = Pnt
Else
Pnt = ThisDrawing.Utility.PolarPoint(FromPnt, _
ThisDrawing.Utility.AngleFromXAxis(FromPnt, ToPnt), VDist)
PntByVector = Pnt
End If
End Function
Public Function ADistance(P1 As Variant, P2 As Variant) As Double
Dim x, Y, Z As Double
x = P1(0) - P2(0)
Y = P1(1) - P2(1)
If UBound(P1) > 1 And UBound(P2) > 1 Then
Z = P1(2) - P2(2)
ADistance = Abs(Sqr((Sqr((x ^ 2) + (Y ^ 2)) ^ 2) + (Z ^ 2)))
Else
ADistance = Abs(Sqr((x ^ 2) + (Y ^ 2)))
End If
End Function