android canvans 画3d,在canvas上绘制3d图形

本文详细介绍了如何使用Android Canvas进行3D图形的绘制,通过数学原理推导出3D点到2D平面的投影公式,并通过JavaScript实现3D图形的动态演示。通过实例代码展示了3D立方体的绘制过程,包括旋转和平移,最终实现了3D波纹效果。
摘要由CSDN通过智能技术生成

项目简介

文章里有相当多的用到中学数学中的知识,推导3d的几何模型是如何绘制到2d平面中去的,最终利用推导出的结论编写代码,实现一个波纹的demo

项目地址:https://github.com/zz632893783/canvas-3d

e3ebe08dddad

效果13.gif

安装项目依赖模块

npm install

运行项目

npm run dev

从z轴观察yz平面上的点

e3ebe08dddad

01.png

想象一下有这么一个三维空间(如图),有一个点B,我们从A点观察B点。那么B点在xy平面上的投影即AB的延长线与平面xy的交点C。而xy平面不就是可以看一个二维的canvas画布吗。

我们暂且将A点放在z轴,B点放在yz平面,则A点的三维坐标可以表示为

A(0,0,zA),B点的三维坐标可以表示为B(0,yB,zB)。从B点做一条垂线垂z轴于D点。

ADB与AOC是相似三角形,所以有

e3ebe08dddad

图片3.png

变换得

e3ebe08dddad

图片6.png

其中DB即B点的y坐标,AO即A点的z坐标,DO即B点的z坐标,所以

e3ebe08dddad

图片7.png

这里的OC也就是C点的y坐标。

从z轴观察xz平面上的点

e3ebe08dddad

02.png

同理我们从A点观察平面xz上的某一点E(xE,0,zE),ADE与AOF是相似三角形

e3ebe08dddad

图片8.png

变换得

e3ebe08dddad

图片9.png

从z轴观察空间内任意坐标

之前所观测的B点是位于yz平面内,E点是位于xz平面内,但是如果是空间内任意位置的点呢

其实道理都是一样的,如下如

e3ebe08dddad

03.png

如果将直线BD平移到E点,直线DE平移到B点,那么将形成一个矩形DBGE,矩形DBGE在xy平面上的投影为矩形OCHF。

由于AGE与AHF相似,所以有

e3ebe08dddad

图片10.png

并且由于ADE与AOF也是相似三角形,所以

e3ebe08dddad

图片11.png

所以

e3ebe08dddad

图片12.png

推导得

e3ebe08dddad

图片13.png

其中GE也就是G点的y坐标,因为矩形DBGE是平行于xy平面的,所以它们z坐标相同,DO等价于G点的z坐标,所以对于空间内任意位置G(xG,yG,zG)

e3ebe08dddad

图片14.png

同样的方法我们可以推导出

e3ebe08dddad

图片15.png

变换得

e3ebe08dddad

图片16.png

结合上两步,CH是H点的x坐标,HF是H点的y坐标,所以从轴上的点A(0,0,zA)观察空间内任意位置G(xG,yG,zG)在平面xy上的投影可表示为

e3ebe08dddad

图片17.png

从任意位置观察空间内任意坐标

沿着x轴平移坐标系

之前的推论到从z轴观察空间内任意位置的投影了,但是实际上A点是有特殊性的,因为它是位于z轴上的某一个点,其xy坐标都为0,如果A是空间内的任意一个点,情况又如何,请看下图

e3ebe08dddad

04.png

假设这个时候真正的坐标系是xy'z',而坐标系xyz是我们临时所建立的一个虚拟的坐标系,那么这个时候A点相对于坐标系xy'z'来说,坐标点可表示为A(xA,0,zA),G点依旧表示为(xG,yG,zG)

我们之前推导的相似三角形的关系,即使换了坐标系,它们的关系依然成立,所以

e3ebe08dddad

图片15.png

变换得

e3ebe08dddad

图片18.png

只不过这个时候 BG=xG-xA,AO与DO与之前相同

求得

e3ebe08dddad

图片19.png

之前推导出的相似三角形关系依旧成立,所以

e3ebe08dddad

图片20.png

变换得

e3ebe08dddad

图片13.png

由于GE,AO,DO与之前相比都没有变化,

所以得

e3ebe08dddad

图片14.png

与之前的推导一致,最后我们得出结论,我们沿着x轴方向移动坐标系的时候(即图中的坐标系有xy'z'移动到了xyz位置),G点在平面xy的投影H点的y坐标不会有变化,但是x坐标为

e3ebe08dddad

图片21.png

沿着y轴平移坐标系

如下图

e3ebe08dddad

05.png

假设x'yz'是真正的坐标系,沿着y轴平移得到临时坐标系xyz,推导步骤和之前的相同,这里不再赘述,直接贴结果

e3ebe08dddad

图片22.png

e3ebe08dddad

图片23.png

也就是说当沿着y轴方向移动坐标系的时候,投影H的x坐标不会有变化,y坐标变为

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值