二维绕任意点旋转_三角函数在图形学里的应用(二) 点绕原点旋转(方法2)、点绕任意点旋转...

本文介绍了二维点绕原点和任意点旋转的数学公式,通过三角函数推导得出,并通过示例计算验证了公式正确性。讨论了两种旋转方法,强调了绕任意点旋转公式的简便性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点绕原点旋转(方法2)

和上一篇《三角函数在图形学里的应用(1)》中的条件不同的是,现在我们不知道OP0和OP1有多长。还是要求p0绕着圆点绕到p1,求p1。

图1已经把公式推导了出来。

(图1)

其中1式与2式的推导过程,上图可能有点没解释明白,这里勇哥详细推导一下:x1=L*cos(a+b)

x1=L*(cos(a)cos(b)-sin(a)sin(b))

x1=L*((x0/L)*cos(b)-(y0/L)*sin(b))

x1=L*(x0cos(b)/L-y0sin(b)/L)

x1=x0cos(b)-y0sin(b)

y1=L*sin(a+b)

y1=L*(sin(a)cos(b)+cos(a)sin(b))

y1=L*((y0/L)cos(b)+(x0/L)sin(b))

y1=L(y0cos(b)/L+x0sin(b)/L)

y1=y0cos(b)+x0sin(b)

推导式子1和2和上篇讲的公式的区别是: 不用知道角a,和OP1的长度。

这样确实方便计算了许多。

(图2)

引用上一篇的CAD图,我们用新公式计算一下:

x1=x0cos(b)-y0sin(b)

y1=y0cos(b)+x0sin(b)

>> 表达式: 17.32*cos(20)-10*sin(20)

12.8552748

>> 表达式: 10*cos(20)+17.32*sin(20)

15.3207151

可以看到结果是正确的。

点绕任意点旋转

绕任意点旋转的公式是:x0=cos(a)*(x-rx0)-sin(a)*(y-ry0)+rx0

y0=cos(a)*(y-ry0)+sin(a)*(x-rx0)+ry0

勇哥画了一张CAD图,下面来推导一下。

在上图中,点(x,y) 绕指定点(rx0,ry0)旋转a度后到(x0,y0), 求x0,y0?

(图3)设L=角b的斜边=角a的斜边

cos(a+b)=(x0-rx0)/L

x0=L*cos(a+b)+rx0

x0=L*(cos(a)cos(b)-sin(a)sin(b))+rx0

因为 cos(b)=(x-rx0)/L

sin(b)=(y-ry0)/L

x0=L*(cos(a)*((x-rx0)/L)-sin(a)((y-ry0)/L))+rx0

x0=cos(a)(x-rx0)-sin(a)(y-ry0)+rx0

sin(a+b)=(y0-ry0)/L

y0=L*sin(a+b)+ry0

y0=L*(sin(a)cos(b)+cos(a)sin(b))+ry0

因为 cos(b)=(x-rx0)/L

sin(b)=(y-ry0)/L

y0=L*(sin(a)*((x-rx0)/L)+cos(a)*((y-ry0)/L))+ry0

y0=sin(a)(x-rx0)+cos(a)(y-ry0)+ry0

y0=cos(a)*(y-ry0)+sin(a)*(x-rx0)+ry0

我们来计算一下,看对不对。

注意,由于CAD的显示精度默认只有两位,所以参入乘法计算误差较大。

所以请相信结果是正确的。命令: cal

>> 表达式: cos(20)*(22.27-5)-sin(20)*(15.08-5)+5

17.7809285

命令: cal

>> 表达式: cos(20)*(15.08-5)+sin(20)*(22.27-5)+5

20.3787895

其它绕指定点旋转的方法

(1)在勇哥的另一篇文章《二维点的旋转 续三(C#演示代码)》中使用的方法如下:1. 首先将旋转点移动到原点处

2. 执行如2所描述的绕原点的旋转

3. 再将旋转点移回到原来的位置

以上的两种方法都没有本主题的公式简单。

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

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值