三角函数超入门(2)锐角三角形的三角比

特殊三角形的sin,cos和tan


内角为30°,45°,60° 的特殊三角形,其三角比如下:

image.png


sin, cos, tan的一些规律


image.png


解题


如下题。

如果只是算一算x,y是多少没多少意思。

勇哥用halcon的算子来画出题意并解题。


image.png

下面的代码中,我们把c=20改为c=200,这样屏幕上的线条长一点方便观察。

dev_close_window()
dev_open_window(0, 0, 400, 400, 'black', WindowHandle)
x:=[200,200]
y:=[150,350]
dev_set_color('red')
*显示线条x
disp_line(200000, x[0], y[0], x[1], y[1])

*200长的线转40度
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, rad(40), x[0], y[0], HomMat2DRotate)
affine_trans_point_2d(HomMat2DRotate, x[0], y[0], Qx1, Qy1)
affine_trans_point_2d(HomMat2DRotate, x[1], y[1], Qx2, Qy2)
disp_line(WindowHandle, Qx1,Qy1, Qx2,Qy2)
*求线y,它是垂足于x线的线
projection_pl(Qx2,Qy2,x[0],y[0],x[1],y[1],RowProj, ColProj)
disp_line(WindowHandle, Qx2,Qy2, RowProj, ColProj)
*擦掉多余的线
dev_set_color('black')
disp_line(WindowHandle,RowProj, ColProj, x[1], y[1])

dev_disp_text('x', 'window', 214, 238, 'black', 'box', ColProj)
dev_disp_text('y', 'window', 136, 322, 'black', 'box', ColProj)
dev_disp_text('200', 'window', 110, 190, 'black', 'box', ColProj)
dev_disp_text('40°', 'window', 173, 187, 'black', 'box', ColProj)

*本题的解
*x/200=cos(40)
*x=200*cos(40)

*y/200=sin(40)
*y=200*sin(40)
xlen:=200*cos(rad(40))
ylen:=200*sin(rad(40))
dev_disp_text('x=153.209', 'window', 280, 138, 'black', 'box', ColProj)
dev_disp_text('y=128.558', 'window', 300, 138, 'black', 'box', ColProj)

*用三平方定理验证结果是不是正确的 
v1:=xlen*xlen+ylen*ylen
v2:=200.0*200.0
if((v1-v2)<0.0000001)
    stop()
endif

image.png


我们来讨论一下这段代码中的几个halcon的知识点:


halcon的角度定义

下图是halcon的角度旋转坐标系。-0.5度就是基于模板,顺时针旋转了0.5度。


image.png

但是在模板匹配算子中,要看create算子是如何定义查找角度范围的,若定义0,rad(360),那么在小于1度的时候halcon会返回负值,在大于1度的时候根据你设定的0-360的范围,返回的是正角度。


做为对比,我们看下角度在数学上直角坐标系上的定义如下:

第一象限逆时针的角是正,第四象限顺时针的角是负。

下图分别为: 45度,-45度。 或者表示弧度为pi/4, -pi/4


image.png


halcon的几个算子说明


rad()  角度转弧度

deg()  弧度转角度

注意在halcon或者C#中,sin,cos之类的三角函数都是需要转入弧度的。

转换公式:

radians(弧度) = (Math.PI / 180) * degrees

degrees(角度) = (180 / Math.PI) *radians


halcon中无理数的大小相等比较

cos(40), sin(40)都是无理数,在比较大小的时候不能是v1=v2

勇哥上了这个当,你查看变量值时,显示v1=40000.0, v2=40000.0,以为v1=v2?

其实是因为显示变量值时被四舍五入显示了。

所以勇哥只能使用下面的方式判定无理数和有理数相等。

如果读者有好办法,请告诉我。

if((v1-v2)<0.0000001)
    stop()
endif


计算点到线的垂线交点


halcon的算子是 projection_pl。

如果是C#,可以用下面的算法。

public static double pointToLineDistance(double x1, double y1, double x2, double y2, double x3, double y3)
 {      
    double normalLength = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));    
     return Math.abs((x3-x1)*(y2-y1)-(y3-y1)*(x2-x1))/normalLength;
    }


另外,win10计算器开根号怎么玩?

image.png

科学模式,数字4左边那个按键

1 。输入要开方的数

2。点那个键

3。点要开几次方

例如求根号2:  先按2,再点image.png,最后按2, 结果是1.4142135623730950488016887242097


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864