三维旋转算法
3D Rotation Algorithm
所以我正在尝试学习一些3D编程,并尝试做一些实验来更好地理解事物是如何工作的。
我正在尝试的一件事是(用三个js)画一条线并随机旋转。
我从来都不是一个矩阵人,我总是以2D的方式做事,这在我的脑海中是有意义的
# CoffeeScript
get_angle:->
Math.atan2(@props.velocity[1],@props.velocity[0])
rotate:(amount)->
ang = @get_angle()
mag = @get_speed()
# props is a velocity vector, [0] is x and [1] is y
@props.velocity[0] = Math.cos(ang+amount)*mag
@props.velocity[1] = Math.sin(ang+amount)*mag
传入的金额是随机的。。。生成随机"行走"
我现在想知道我怎么能在3d中做同样的事情?现在应用程序运行良好(我看到了我的行),但它是"平坦的"。没有深度(由于Z组件没有被修改)这就是我想做的,这是一个明智的方式吗?
CoffeeScript
get_angle:->
Math.atan2(@props.velocity[1],@props.velocity[0])
get_angle2:->
# not sure about this, but I feel like I need to be finding the angle from the z now and something else.
rotate:(amount)->
ang = @get_angle()
ang2 = @get_angle2()
mag = @get_speed()
# props is a velocity vector, [0] is x and [1] is y
@props.velocity[0] = Math.cos(ang+amount)*mag
@props.velocity[1] = Math.sin(ang+amount)*mag
@props.velocity[2] = # I have a feeling here I would do something with ang2 and amount?
我知道从技术上讲,我可能想让其中两个组件的旋转通过,但我想也许我可以试着让它对所有三个组件都进行相同的旋转。
3d中的旋转比2d中的旋转要复杂一些,因为你必须绕线旋转,或者使用四元数,而不是点(2d)。看这里可以看到旋转矩阵的不同组合,这取决于你旋转的线。三维变换包括四乘四矩阵来创建齐次坐标,并且需要矩阵的三乘三部分来创建旋转。
你也可以使用四元数(特殊类型的数字)来计算旋转,这在三维应用中非常方便,因为它解决了一些关于"万向锁"的问题。
相关文章:
- 知道为什么我的旋转木马不会自动更改图片吗
- 循环比赛位置算法
- javascript扫雷器floodfill算法不能正常工作
- 顺时针旋转Svg元件
- 将鼠标旋转限制为特定的度数
- 旋转后拖动对象
- 禁用旋转木马中的下一个按钮和上一个按钮
- 手动创建旋转活动指示器
- 如何在容器中定位旋转的图像
- Node JS中的排名系统算法
- 在轴上旋转SVG图像
- 绕z轴旋转时出现iOS陀螺仪错误
- 查找仅适用于原始图像的图像放大算法的名称
- 在数组的 2/3 上调用自身的排序算法
- 旋转按钮[HTML][JS]
- 在JS中围绕旋转对象旋转对象
- Threejs-围绕中心旋转对象
- 旋转木马;启用内容安全策略时无法工作
- 三维旋转算法
- 我的数组旋转算法有什么问题