猫史档案馆


【神奇代码岛】三角函数的应用

用户:迷失冷光迷失冷光查看:1621 回复:57 评论:49 创建时间:2021-11-13T12:12:59


——————————————————————————————————————————————————

——————————————————————————————————————————————————

——————————————————————————————————————————————————

今天我们来讲讲三角函数

看图:

center_image

这是一个圆

可见向右是0°

center_image

此图中我们要求深蓝色线的长度

半径为1

浅蓝色与蓝色线之间的夹角是90°

那么深蓝色线=π/2

=1/2π

再看下图

center_image

这是蓝色线长度是上一幅图的2倍

所以蓝色线的长度是2*1/2π=π

再看

center_image

此图中蓝色线又是上一幅图的两倍

那么就再乘2:2*π=2π

 

我们得到了一个计算角度的方法

1/2π就是90°

π就是180°

2π就是360°

 

假设a=30°

用刚才的表示方法就是a=30/360*2π

那么

center_image

我们就获得了一个点

假设红点的位置是(0,0)

x坐标是0,y坐标也是0

上面有一条紫色的线和一条粉色的线

它们交汇的部分我们称之为b

那么b点也有其x坐标和y坐标

b点的x坐标是粉色线的长度

b点的y坐标是紫色线的长度

那么如何确定坐标呢?(要求背诵)

粉色线的长度是Math.cos(a)

紫色线的长度是Math.sin(a)

//a是一个模型
//b也是一个模型
b.position.y = a.position.y;
world.onTick(({tick})=>{
    b.position.x = a.position.x + Math.cos(tick * 旋转速度);
    b.position.z = a.position.z + Math.sin(tick * 旋转速度);
})

a是角度

举个例子

让模型a围绕着模型b旋转

运行一下代码

有人会觉得b模型靠a模型太近了

那么再看

center_image

此图中绿色线是粉色线长度的2倍

深红色线是紫色线长度的2倍

浅蓝色线仍然指着绿色线与深红色线的交汇点

大圆的半径是2

所以如果要让旋转距离加大的话

b.position.y = a.position.y;
world.onTick(({tick})=>{
    b.position.x = a.position.x + Math.cos(tick * 旋转速度) * 旋转半径;
    b.position.z = a.position.z + Math.sin(tick * 旋转速度) * 旋转半径;
})

现在我们已经搞懂二维旋转的原理了

下面看三维

 

以下内容高危,萌新勿入

 

如何表达球上一点

center_image

这是一个球(画的有点喵)

假设此球的半径是1

那么

center_image

 

这就像一个地球了

红色是纬线,蓝色是经线(甚)

center_image

这个球上红线是angle(角度)

蓝线是up(仰角)

绿点位置是(0,0,0)

x坐标y坐标z坐标都是0

黄色点的角度是红线的角度,仰角是蓝线的仰角

我们先来处理蓝线:

蓝色线的sin值是黄色点的y坐标

如

y = Math.sin(up)

然后蓝色线的cos值是球的半径

如

radius = Math.cos(up)

再来处理红色线:

与上文处理二维方法相似

x = Math.cos(angle)
z = Math.sin(angle)

但这是会发现如果仰角距离0°或180°较远时

黄点会不在球上

所以x、y值要乘上radius

x = Math.cos(angle) * radius;
z = Math.sin(angle) * radius;

如果发现总体距喵点太近

就需要再乘上一个radius

我们封装成一个函数

function point_in_ball(origin,angle,up,radius){
    return new Box3Vector3(
        origin.x + Math.cos(angle) * Math.cos(up) * radius,
        origin.y + Math.sin(up) * radius,
        origin.z + Math.sin(angle) * Math.cos(up) * radius
    )
}

 

然后我们说一下反求

这里就不讲解了

atan2功能就是这样

大家背诵就好了

二维:

angle = Math.atan2(y,x);

三维:

up = Math.atan2(y,Math.sqrt(x**2+z**2));
angle = Math.atan2(z,x);

上面出现的代码都是JS的

所以可以拿到编辑服里用


回复

上一页第 1 页 / 共 2 页下一页
时当日色QWQ时当日色QWQ

沙发

点赞0


评论

认证(帖子刚发15秒)

对了机甲x能给个开始按钮吗

我已经弃坑了

为啥a

难道有新坑👀👀

新坑不在我这边

在谁哪,是lolita?

她图我又没权

哦吼,所以你没开新图?

所以布灵岛()

布灵岛也弃坑?


async_functionasync_function

awa

点赞0


评论


async_functionasync_function

可以讲讲顺时针逆时针()

点赞0


评论

-tick * 旋转速度就好了 关键是你从上面看还是下面看


async_functionasync_function

也就是sin变cos cos变sin

点赞0


评论


DebugDynamoDebugDynamo

萌新表示看不懂

点赞0


评论


想不出来叫什么想不出来叫什么

芜湖

点赞0


评论


星辰_零柒星辰_零柒

(评论区里全是大佬,除我)

点赞0


评论


未命名用户015734未命名用户015734

看懂了但没有完全看懂(什

冷光yyds

点赞1


评论


YDS尹子YDS尹子

好家伙,你真的只有六年级?

点赞0


评论

6+1

对不起)我的记忆貌似还停留在几个月前)

yhh重出江湖了,还在喵


蔡宁进(大家再见)蔡宁进(大家再见)

看不懂

点赞0


评论


念满寒念满寒

评论区全是大佬(除了我)

点赞0


评论


难起的名字难起的名字

你学废了吗?emotion_doge

点赞0


评论

初中版1+1(((

我毛氏囧了


难起的名字难起的名字

 

 

(评论区里全是大佬,除我)

 

点赞0


评论


神兽喵神兽喵

好家伙

点赞0


评论


Forzen_SevenForzen_Seven

李姐李姐

点赞0


评论


星辰Lolita星辰Lolita

function point_in_ball(origin,angle,up,radius){
    return new Box3Vector3(
        origin.x + Math.cos(angle) * Math.cos(up) * radius,
        origin.y + Math.sin(up) * radius,
        origin.z + Math.sin(angle) * Math.cos(up) * radius
    )
}

白嫖了

点赞0


评论


一缕余晖一缕余晖

不错不错,但其实大家只要知道怎么用就行了,没必要知道内涵

点赞2


评论


DHS李钛钅黑DHS李钛钅黑

三角函数有必要那么难吗?

点赞0


评论


烂柯仙碁烂柯仙碁

一题三角函数诱导公式我可不困了(doge)

但是一题代码我就又困了(doge)

点赞0


评论


我就路过看看我就路过看看

哇,六年级的小伙子只看得懂前面的,编程老师上课讲过

点赞1


评论


神岛吉吉喵神岛吉吉喵

牛啊牛啊~~~支持一下

点赞2


评论

捉吉

吃吉)

炖吉~


阳光猫阳光猫

牛掰imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E5%8E%89%E5%AE%B3%E4%BA%86.gif"alt="emotion_编程猫_厉害了"

点赞0


评论


小白一号Rua小白一号Rua

nbnb直接晕了

点赞2


评论


源码极客源码极客

咱就是说,四年级的费点劲勉强能看懂二维的

点赞1


评论


灵清帝王吃爆一切厕所灵清帝王吃爆一切厕所

咱就是说()这是我一个六年级的人能看的东西吗?

点赞0


评论

这是你一个屑能看的东西吗?(什

我六年级学的三角函数()

我上岛晚 ()去年10月份才来()

开玩笑()我屑死了)(什

好家伙教程不一样?

就你内卷是吧()


美男子阿宇美男子阿宇

咱就是说()这是我一个4年级的人能看的东西吗?)我也只能看懂一点())

点赞1


评论

可以的,我都看懂了(虽然只能看懂前半部分)


全能代码师全能代码师

挖一挖

点赞1


评论


快乐的皮卡丘A快乐的皮卡丘A

身为捌年级的我看了之后孝了

点赞0


评论


用户_869149用户_869149

nb啊nb)

点赞0


评论


马云编程猫马云编程猫

收藏夹里见!

点赞1


评论

ee

捉!