JS立体视觉投影

啰嗦几句

  前端视觉呈现立体感,并不是学的高数立体几何公式那样,开始我也一直以为立体几何就能画出,立体图,其实也没错。但是呢,不转动就看不出效果,转动后的立体图在2维平面怎么体现的呢。这还要从web端的JS说起,哈哈,之前就想实现转动的球体,Jquery插件一般都有,别人写的,曾经研究过,和想的不一样,没看懂,因为有一个 特别大的z轴值。这两天从知乎看到有人解说了一下,差点没看明白,琢磨了一下,想通了这里记录下来和你们分享。
参考了:https://zhuanlan.zhihu.com/p/366646473。

立体图投影到2D平面

将人的视点移到z轴上,不为别的为了好计算,毕竟坐标轴可以移动。当然也可以不变换,不过这里不做介绍。
在这里插入图片描述
不好直接计算P点的值,通过在x,y轴的映射点P1’和P2’来计算。
在这里插入图片描述
示例计算映射点P的y坐标值,
在这里插入图片描述
具体公式如下:
在这里插入图片描述
在这里插入图片描述

同理可得:

在这里插入图片描述
最后映射在二维平面的坐标为:
在这里插入图片描述
根据同样的计算方式,我们把V点挪出Z轴,有:

在这里插入图片描述

JS实现举例

<html>
 <body>
	<div id="demo" ><canvas width="500" height="500" ></canvas></div>
	<script> 

	  var canvas = document.getElementsByTagName('canvas')[0];
	  var ctx = canvas.getContext('2d');

		  
	  var vz=500; //移动深远视野
	  var vy=0 //移动上下视野
	  var vx=0 //移动左右视野
	  clock=function(x,y,z,Vx,Vy){
		  return {"x":~~((x-Vx)*vz/(vz-z)+Vx),"y":~~( (y-Vy)*vz/(vz-z)+Vy)}
	  };

	 var va={"a":clock(10,10,100,vx,vy),"b":clock(150,10,100,vx,vy),"c":clock(150,60,100,vx,vy),"d":clock(10,60,110,vx,vy),"e":clock(25,5,-10,vx,vy)};
	  ctx.lineWidth=2;
	  ctx.beginPath();
	  ctx.moveTo(va.a.x,va.a.y);
	  ctx.lineTo(va.b.x,va.b.y);
	  ctx.lineTo(va.c.x,va.c.y);
	  ctx.lineTo(va.d.x,va.d.y);
	  ctx.lineTo(va.e.x,va.e.y);
	  ctx.lineTo(va.a.x,va.a.y);
	  ctx.moveTo(va.e.x,va.e.y);
	  ctx.lineTo(va.c.x,va.c.y);
	  ctx.stroke();
	console.log(va);
	</script>
 </body>
</html>

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值