乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: russell84

[编程交流] 与cu相切的角度/斜率

[复制链接]

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:44:17 | 显示全部楼层
导数给出切线的斜率。
 
使用atan2获取与其相切的弧。
 
此外,我必须在正象限中使用度=180角,因为我得到的答案是175和115,而它应该是5和65等等
 
谢谢你们的帮助。
 
这很有效
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:47:32 | 显示全部楼层
好的,很高兴它对你有用Russell-只是提供其他建议
 
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:52:00 | 显示全部楼层
对于感兴趣的人来说,还有更多的角度。
 
  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]
  2. [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]
  3. [size=2]DoubleAngle = math.Atan2(Point2(1) - Point1(1),Point2(0) - Point1(0)) [/size][size=2][color=#008000]'Answer in Radians[/color][/size]
  4. [size=2][color=#0000ff]End Function[/color][/size]
  5. [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]
  6. [size=2][color=#008000]'u . v = u.x * v.x + u.y * v.y = |u|*|v|*cos(a)[/color][/size]
  7. [size=2][color=#008000]'a being the angle between the vectors.[/color][/size]
  8. [size=2][color=#008000]'So the angle is given by:[/color][/size]
  9. [size=2][color=#008000]'double n1 = sqrt(x1*x1+y1*y1), n2 = sqrt(x2*x2+y2*y2);[/color][/size]
  10. [size=2][color=#008000]'double angle = acos((x1*x2+y1*y2)/(n1*n2));[/color][/size]
  11. [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]
  12. [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]
  13. [size=2]N1 = Math.Sqrt(Math.Pow(Point1(0), 2) + Math.Pow(Point1(1), 2))[/size]
  14. [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]
  15. [size=2]N2 = Math.Sqrt(Math.Pow(Point2(0), 2) + Math.Pow(Point2(1), 2))[/size]
  16. [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]
  17. [size=2][color=#008000][size=2][color=black]AngleBetweenVectors = AngleTemp[/color][/size]
  18. [/color][/size][size=2][color=#0000ff]End Function[/color][/size]
  19. [size=2][color=#0000ff][size=2][color=#008000]'To get the Tangent vector to a curve at a given point (StartPt1) example[/color][/size]
  20. [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]
  21. [size=2][color=#008000]'To get the Normal vector (Perp) to the vectorTangent[/color][/size]
  22. [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]
  23. [/color][/size]

 
如果有任何补充或建议,请张贴。
谢谢
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:56:45 | 显示全部楼层
都是好东西。
 
关于本规范的一项建议:
 
  1. 'To get the Normal vector (Perp) to the vectorTangent
  2. Dim VectorNormal1 as AcadNetGeometry.Vector3d = New AcadNetGeometry.Vector3d(-VectorTangent1.Y, VectorTangent1.X, VectorTangent1.Z)

 
我知道你之前提到的重点主要是2d,但对于3d,某些情况可能会返回不理想的结果。其中最明显的情况是切线向量与世界Z对齐,即0,0,1。返回值也将为0,0,1
 
一般来说,我认为这种查询最有用的返回是垂直于切向量的向量,但也与“TopCurve”位于同一平面上(如果TopCurve确实是平面曲线)。满足这种细化的一个好方法是获得顶曲线的叉积。法线和向量变换。见附件。
 
我假设要真正符合3d,即使是非平面曲线,向量切线法线也始终指向曲率中心。这绝对是一个额外的问题。
交叉积。图纸
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 16:00:24 | 显示全部楼层
我想我还应该指出我的声明:
不是特别符合3d。它将返回X轴和向量投影到WCS之间的角度(我猜这就是您在原始帖子中寻找的)。
 
这两个矢量之间的真实3d角度必须考虑矢量3d。Z分量。矢量3D。GetAngleTo方法(X轴为Vector3d)。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 01:10 , Processed in 0.349329 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表