russell84 发表于 2022-7-6 14:58:37

与cu相切的角度/斜率

有人能帮忙吗
 
在vb中。net如何找到给定点相对于X轴的切线与曲线的角度?
 
这也必须是象限敏感的吗?

CarlB 发表于 2022-7-6 15:06:47

不知道vb。net,但您需要的函数/表达式是“反正切”,所以请寻找类似的函数/表达式。在lisp中是“atan”。是的,它是象限敏感的,正切线会给你一个0-90度的结果,负切线是90-180度。
 
**编辑**发现这个,可能会有帮助:
 
本例使用Math类的Atan方法计算pi的值。
 

Public Function GetPi() As Double
   ' Calculate the value of pi.
   Return 4.0 * Math.Atan(1.0)
End Function

SEANT 发表于 2022-7-6 15:11:28

3d曲线的一般方法是:
 
1、选择曲线
2.使用(DatabaseServices.curve.GetClosestPointTo)在曲线上拾取点(Point3d)
3.使用(DatabaseServices.Curve.GetFirst导数(Geometry.Point3d))获取一阶导数(Geometry.Vector3d)
4、获取与系统的角度。数学Atan(Geometry.Vector3d.Y/Geometry.Vector3d.X)

russell84 发表于 2022-7-6 15:12:37

啊,非常感谢

russell84 发表于 2022-7-6 15:18:24

那么,我如何计算它在哪个象限,这样我就可以计算出‘切线法线’。?

Lee Mac 发表于 2022-7-6 15:20:45

Tan对于象限1和3是正的,对于象限2和4是负的,因此正结果表示向量在x轴的0-pi/2处,加或减pi;负π/2-π,加或减π。
 
我想你可以添加编码,通过π弧度来校正角度,这样你只能得到一个介于0和π之间的答案,那么切线的法线就是弧tan+pi/2。
 
这是一个纯二维问题,还是你对切线的副法线也感兴趣?

russell84 发表于 2022-7-6 15:25:48

不,这纯粹是二维的。
 
谢谢你-我改变了代码,所以它现在可以工作了。
 
这就是我所拥有的。
 

Public Function CalcAngle(ByVal ObjCurve As AcadNetDbServices.Curve, ByVal Dist As Double)

Dim Radians As Double
Dim Degrees As Double
Dim Point1 As AcadNetGeometry.Point3d = ObjCurve.GetPointAtDist(Dist)
Dim firstderiv As AcadNetGeometry.Vector3d = ObjCurve.GetFirstDerivative(Point1)
Radians = Math.Atan2(Cdbl(firstderiv.Y) , Cdbl(firstderiv.X))
Degrees = Radians * (180 / Math.PI)

'If in positive quadrants then = 180 - abs.Degrees
'If in Negative quadrants then = Abs.Degrees - 180
If Degrees < 0 Then
Degrees = (Math.Abs(Degrees)) + 180
Else
Degrees = 180 - (Math.Abs(Degrees))
End If
CalcAngle = Degrees

End Function


CarlB 发表于 2022-7-6 15:32:19

不确定为什么要为任何积极结果设置度=180度。假设它最初是在45度计算的,这不是一个好答案吗?但是我不知道你用它做什么。。。

Lee Mac 发表于 2022-7-6 15:33:19

我对vb了解不多。net(事实上我对它一无所知),但是当你找到一阶导数时,它不返回向量吗那么你就可以从向量中准确地知道切线的方向。

russell84 发表于 2022-7-6 15:37:37

导数给出切线的斜率。
 
使用atan2获取与其相切的弧。
 
此外,我必须在正象限中使用度=180角,因为我得到的答案是175和115,而它应该是5和65等等
 
谢谢你们的帮助。
 
这很有效
页: [1] 2
查看完整版本: 与cu相切的角度/斜率