齿轮论坛 www.gearbbs.net

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4939|回复: 8
收起左侧

[使用问题] 探讨,计算机vb编程中的正弦反函数

[复制链接]
发表于 2010-3-5 06:30 | 显示全部楼层 |阅读模式

本帖子中包含更多资源。

您需要 登录 才可以下载或查看,没有账号?注册

x
如果在使用普通的计算器上,已知正弦函数值,需要求取其角度,相当方便的。
但是在vb编程的过程中。如何在已知到正弦函数值的情况下,求取其正弦角度呢。当然,余弦的情况也是如此。敬请指导
发表于 2010-3-5 15:50 | 显示全部楼层
本帖最后由 jingshi 于 2010-3-5 15:57 编辑

vb6.0 齿根角计算 ri1 = Atn((dy1 - diy1) / (2 * lj))
再就是角度转换了

渐开线函数是通过转换求得
917869446
发表于 2010-3-5 21:46 | 显示全部楼层
本帖最后由 msm2002 于 2010-3-5 21:48 编辑

Atn()是VB反正切函数,VB不提供其他反三角函数,不过可以用下列公式导出:

Inverse Sine (反正弦):

Arcsin(X) = Atn(X / Sqr(-X * X + 1))

Inverse Cosine (反余弦):

Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)

Inverse Secant (反正割):

Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))

Inverse Cosecant (反余割):

Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))

以上这些公式,其实就是应用了数学中的各类三角函数和正切函数之间的关系导出的。其中需要注意的是其中的 X 不能等于正负1。

'Secant
Public Function Sec(ByVal Number As Double) As Double
Sec = 1 / Cos(Number)
End Function
'Cosecant
Public Function Csc(ByVal Number As Double) As Double
Csc = 1 / Sin(Number)
End Function
'Cotangent
Public Function Ctn(ByVal Number As Double) As Double
Ctn = 1 / Tan(Number)
End Function
'Inverse Sine
Public Function ASin(ByVal Number As Double) As Double
ASin = Atn(Number / Sqr(-Number * Number + 1))
End Function
'Inverse Cosine
Public Function ACos(ByVal Number As Double) As Double
ACos = Atn(-Number / Sqr(-Number * Number + 1)) + 2 * Atn(1)
End Function
'Inverse Secant
Public Function ASec(ByVal Number As Double) As Double
ASec = Atn(Number / Sqr(Number * Number - 1)) + Sgn((Number) - 1) * (2 *
Atn(1))
End Function
'Inverse Cosecant
Public Function ACsc(ByVal Number As Double) As Double
ACsc = Atn(Number / Sqr(Number * Number - 1)) + (Sgn(Number) - 1) * (2 *
Atn(1))
End Function
'Inverse Cotangent
Public Function ACtn(ByVal Number As Double) As Double
ACtn = Atn(Number) + 2 * Atn(1)
End Function
'Hyperbolic Sine
Public Function SinH(ByVal Number As Double) As Double
SinH = (Exp(Number) - Exp(-Number)) / 2
End Function
'Hyperbolic Cosine
Public Function CosH(ByVal Number As Double) As Double
CosH = (Exp(Number) + Exp(-Number)) / 2
End Function
'Hyperbolic Tangent
Public Function TanH(ByVal Number As Double) As Double
TanH = (Exp(Number) - Exp(-Number)) / (Exp(Number) + Exp(-Number))
End Function
'Hyperbolic Secant
Public Function SecH(ByVal Number As Double) As Double
SecH = 2 / (Exp(Number) + Exp(-Number))
End Function
'Hyperbolic Cosecant
Public Function CscH(ByVal Number As Double) As Double
CscH = 2 / (Exp(Number) - Exp(-Number))
End Function
'Hyperbolic Cotangent
Public Function CtnH(ByVal Number As Double) As Double
CtnH = (Exp(Number) + Exp(-Number)) / (Exp(Number) - Exp(-Number))
End Function
'Inverse Hyperbolic Sine
Public Function ASinH(ByVal Number As Double) As Double
ASinH = Log(Number + Sqr(Number * Number + 1))
End Function
'Inverse Hyperbolic Cosine
Public Function ACosH(ByVal Number As Double) As Double
ACosH = Log(Number + Sqr(Number * Number - 1))
End Function
'Inverse Hyperbolic Tangent
Public Function ATanH(ByVal Number As Double) As Double
ATanH = Log((1 + Number) / (1 - Number)) / 2
End Function
'Inverse Hyperbolic Secant
Public Function ASecH(ByVal Number As Double) As Double
ASecH = Log((Sqr(-Number * Number + 1) + 1) / Number)
End Function
'Inverse Hyperbolic Cosecant
Public Function ACscH(ByVal Number As Double) As Double
ACscH = Log((Sgn(Number) * Sqr(Number * Number + 1) + 1) / Number)
End Function
'Inverse Hyperbolic Cotangent
Public Function ACtnH(ByVal Number As Double) As Double
ACtnH = Log((Number + 1) / (Number - 1)) / 2
End Function
'Logarithm to base N
Public Function LogN(ByVal Base As Double, ByVal Number As Double)
LogN = Log(Number) / Log(Base)
End Function
'Convert degrees to radians
Public Function DegToRad(ByVal Number As Double) As Double
DegToRad = Number * 1.74532925199433E-02 'pi/180
End Function
'Convert radians to degrees
Public Function RadToDeg(ByVal Number As Double) As Double
RadToDeg = Number * 57.2957795130824 ' 180/pi
End Function
发表于 2010-3-6 10:50 | 显示全部楼层
版主正解!VB中只提供了反正切函数Atn(),其他的反三角函数,需要通过转化
 楼主| 发表于 2010-3-6 19:16 | 显示全部楼层
真正的妙,:)
先生的确是有心人呀,谢谢!
导出的常用函数挺全的,也是值得收藏的。
发表于 2010-3-7 08:39 | 显示全部楼层
感谢,学习了,非常有用
发表于 2010-12-1 18:32 | 显示全部楼层

程序值得收藏!
在这些公式推导中,最好加一些预防溢出或出错的程序,比如某些变量在(-1,1)之间的要求,编出的程序才更有通用性。
发表于 2010-12-3 08:44 | 显示全部楼层
回复 supperroom2010 的帖子

确实是这样的,需要加入参数限制,要不程序会非正常推出。
发表于 2010-12-16 21:41 | 显示全部楼层
其实这些公式在高中时就已经学过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|齿轮论坛

GMT+8, 2024-5-9 14:49 , Processed in 0.199718 second(s), 10 queries , MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表