28
130
126
初露锋芒
使用道具 举报
114
1万
中流砥柱
[size=2][color=#008000]'If you want the the angle between the line defined by these two points and the horizontal axis:[/color][/size][size=2][color=#0000ff]Public Function [/color][/size][size=2]DoubleAngle ([/size][size=2][color=#0000ff]ByVal [/color][/size][size=2]Point1 [/size][size=2][color=#0000ff]As [/color][/size][size=2]AcadNetGeometry.Point3d, [/size][size=2][color=#0000ff]ByVal [/color][/size][size=2]Point2 [/size][size=2][color=#0000ff]As [/color][/size][size=2]AcadNetGeometry.Point3d) [/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#6f002f]Double[/color][/size][size=2]DoubleAngle = math.Atan2(Point2(1) - Point1(1),Point2(0) - Point1(0)) [/size][size=2][color=#008000]'Answer in Radians[/color][/size][size=2][color=#0000ff]End Function[/color][/size][size=2][color=#008000]'If you want the angle bewteen the vectors OP1 and OP2 (O being the origin), you should know that the dot product between two vectors u and v is:[/color][/size][size=2][color=#008000]'u . v = u.x * v.x + u.y * v.y = |u|*|v|*cos(a)[/color][/size][size=2][color=#008000]'a being the angle between the vectors.[/color][/size][size=2][color=#008000]'So the angle is given by:[/color][/size][size=2][color=#008000]'double n1 = sqrt(x1*x1+y1*y1), n2 = sqrt(x2*x2+y2*y2);[/color][/size][size=2][color=#008000]'double angle = acos((x1*x2+y1*y2)/(n1*n2));[/color][/size][size=2][color=#0000ff]Public Function [/color][/size][size=2]AngleBetweenVectors([/size][size=2][color=#0000ff]ByVal [/color][/size][size=2]Point1 [/size][size=2][color=#0000ff]As [/color][/size][size=2]AcadNetGeometry.Point3d, [/size][size=2][color=#0000ff]ByVal [/color][/size][size=2]Point2 [/size][size=2][color=#0000ff]As [/color][/size][size=2]AcadNetGeometry.Point3d) [/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#6f002f]Double[/color][/size][size=2][color=#0000ff]Dim [/color][/size][size=2]N1 [/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#6f002f]Double[/color][/size][size=2]N1 = Math.Sqrt(Math.Pow(Point1(0), 2) + Math.Pow(Point1(1), 2))[/size][size=2][color=#0000ff]Dim [/color][/size][size=2]N2 [/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#6f002f]Double[/color][/size][size=2]N2 = Math.Sqrt(Math.Pow(Point2(0), 2) + Math.Pow(Point2(1), 2))[/size][size=2][color=#0000ff]Dim [/color][/size][size=2]AngleTemp [/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#6f002f]Double [/color][/size][size=2]= Math.Acos((Point1(0) * Point2(0) + Point1(1) * Point2(1)) / (N1 * N2)) [/size][size=2][color=#008000]'(in radians) * 180/MATH.PI to get degrees[/color][/size][size=2][color=#008000][size=2][color=black]AngleBetweenVectors = AngleTemp[/color][/size][/color][/size][size=2][color=#0000ff]End Function[/color][/size][size=2][color=#0000ff][size=2][color=#008000]'To get the Tangent vector to a curve at a given point (StartPt1) example[/color][/size][size=2][color=#0000ff]Dim [/color][/size][size=2][color=#000000]VectorTangent1 [/color][/size][size=2][color=#0000ff]As [/color][/size][size=2][color=#000000]AcadNetGeometry.Vector3d = TopCurve.GetFirstDerivative(StartPt1)[/color][/size][size=2][color=#008000]'To get the Normal vector (Perp) to the vectorTangent[/color][/size][size=2][color=#0000ff]Dim [/color][/size][size=2][color=#000000]VectorNormal1 [/color][/size][size=2][color=#0000ff]as [/color][/size][size=2][color=#000000]AcadNetGeometry.Vector3d = [/color][/size][size=2][color=#0000ff]New [/color][/size][size=2][color=#000000]AcadNetGeometry.Vector3d(-VectorTangent1.Y, VectorTangent1.X, VectorTangent1.Z)[/color][/size][/color][/size]
10
973
909
'To get the Normal vector (Perp) to the vectorTangentDim VectorNormal1 as AcadNetGeometry.Vector3d = New AcadNetGeometry.Vector3d(-VectorTangent1.Y, VectorTangent1.X, VectorTangent1.Z)
本版积分规则 发表回复 回帖后跳转到最后一页
微信公众平台
扫描访问手机版
点击图片下载手机App
|关于我们|小黑屋|乐筑天下 繁体中文
GMT+8, 2025-3-5 01:10 , Processed in 0.349329 second(s), 60 queries .
© 2020-2025 乐筑天下
在线时间:10:00-17:00
暂无
扫一扫,关注我们
帮助中心
关于我们
下载APP客户端