三维空间中xoy平面上特定抛物线的正等测投影解析解的一种求法
背景
背景:为锻炼代同学,老师给了她一个反向工程微信“跳一跳”小游戏的任务,希望做一个一样的出来。跳一跳中,有方块,有小人,小人站在方块上。
这个游戏的玩法是,用手指按住手机屏幕,松开手指小人飞出。随着屏幕按压时间的增加,跳跃距离也会增加。希望得到小人跳跃的曲线。
观察到游戏中的抛物线并不对称,猜测它是在三维空间建模投影到一个平面上的。看《交互式计算机图形学》(Edward Angel,交互式计算机图形学,电子工业出版社,2012.5,p141)中,正等测(正等测等价于等轴测)的例子(图一)和跳一跳游戏中方块(图二)很相似(感谢代同学提供图片),猜测它使用的是三维空间正等测投影到二维平面上的投影。假设跳一跳的方块是由三维直角坐标系下的方块做正等测投影得到的,观察跳一跳方块中朝向我们的角,三个角都是120度,这和正等测的定义相符合。
图一
图二
解析解是什么
此前我的文章中讲了数值解的求法,按顺序给出了几百个点作为抛物线的采样,但有了解析式(参数方程也是一种解析式),就可以通过在公式中代入参数来求得坐标,而且可以求得精确的坐标(数值解并不精确)。比如,y=x^2精确的描述了一条抛物线。
一段题外话
与张慧杰老师讨论了计算机图形学opengl库的本质。都是矢量图形,用矩阵运算可以实现各种变换,光栅化后得到点。屏幕是一个一个的像素点,矢量图形要变成像素点才能显示在屏幕上。
矩阵与坐标变换
在计算机图形学中,三维的点用四维齐次坐标表示。点的投影,可以通过点左乘一个变换矩阵来实现。正等测的变换矩阵是:

将抛物线y=x^2表示为参数方程形式。
x=t
y=t^2
z=0
观察该参数方程知,该抛物线可看作齐次坐标下点(t,t^2,0,1),其中t为实数。
点乘以变换矩阵,得到变换后的点。
结果为:
x = 0.7071 t - 0.7071 t^2
y = 0
z = -0.4082 t - 0.4082 t^2
于是
x = 0.7071 t - 0.7071 t^2
y = 0
z = -0.4082 t - 0.4082 t^2
就是三维空间中抛物线y=x^2正等测投影后的抛物线参数方程。
在跳一跳游戏的三维空间中,如图1…. 
所示的抛物线的隐函数表达式是z=(100-(x-10)(x-10))/10(0<x<=20)
这条抛物线的参数方程为
x=-i
z=(100-(i-10)(i-10))/10(0<i<=20)
正等测变换过程就是矩阵乘法,将(x,y,z,i)左乘正等测投影矩阵,得到变换后的参数方程。
变换后的参数方程为
x=0.7071t
y=-0.4082t+0.8165(100-(t-10)(t-10))/10 (0<t<=20)
正等测变换后的抛物线如图2所示
在研发中的应用
在跳一跳游戏中,代秋彤同学调用由代秋彤同学提供的函数,抛物线数组 foo(起始点坐标,x的系数)。采样数量事先约定为采样共八个点。x是平面中抛物线的二次项。
由起始点坐标、x的系数可以确定抛物线。
根据平移变换,把抛物线的起点平移到起始点坐标。根据伸缩变换,改变投影前的抛物线的x的系数,抛物线将被拉长。我们观察到,跳一跳小游戏中不管抛物线多长,其高度不变。于是我们只拉长/缩短抛物线,这样符合我们观察到的现象。
应用示例
如,根据如图3所示的抛物线,代秋彤同学传来起始坐标(62,221)和x的系数1/2
隐函数方程:
z(x)=100 - (x/2-10)*(x/2-10))/2
参数方程:
x=t
z=100 - (t/2-10)*(t/2-10))/2
正等测变换后的参数方程:
x = 0.7071t
z = -0.4082t + 0.8165(100 - (t/2-10)(t/2-10))/2
平移:
x = 0.7071t-14.1422
z = -0.4082t + 0.8165(100 - (t/2-10)(t/2-10))/2+8.1642
根据采样间隔得到采样点:
(65,221) (65,199) (69,187) (72,176) (77,172) (81,176) (86,187) (90,205)
根据采样点,我们可以用小人在屏幕上画出曲线。
感谢小霞给出写作意见。
感谢刘典老师,没有他我们还在错误的路线上继续。
感谢代同学与我讨论、帮助我给出数据。
三维空间中xoy平面上特定抛物线的正等测投影解析解的一种求法的更多相关文章
- 三维点集拟合:平面拟合、RANSAC、ICP算法
ACM算法分类:http://www.kuqin.com/algorithm/20080229/4071.html 一: 拟合一个平面:使用SVD分解,代码里面去找吧 空间平面方程的一般表达式为: A ...
- Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good
引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...
- 浅析Linux用户空间中的Mmap
一.MMap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系.实现这样的映射关系后,进程就可以采 ...
- Oracle导入dmp备份文件到不同的表空间中
原文链接:http://www.2cto.com/database/201211/171081.html 将DMP导入到不同的表空间中 1,用imp导出数据 cmd进入orcle安装目录bin下 ...
- POJ C程序设计进阶 编程题#4:寻找平面上的极大点
编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描 ...
- COJN 0485 800503寻找平面上的极大点
800503寻找平面上的极大点 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个平面上,如果有两个点(x,y),(a,b) ...
- uva10245-The Closest Pair Problem(平面上的点分治)
解析:平面上的点分治,先递归得到左右子区间的最小值d,再处理改区间,肯定不会考虑哪些距离已经大于d的点对,对y坐标归并排序,然后从小到大开始枚举更新d,对于某个点,x轴方向只用考虑[x-d,x+d]( ...
- 平面上的地图搜索--Java学习笔记(四)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 这一个月以来,都在学习平面上的地图搜索,主 ...
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...
随机推荐
- TCL函数“参数自动补全” 与 “help 信息显示”
tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...
- bootstrap 多级下拉菜单
如上效果: 实现代码: 导入js和css: <link rel="stylesheet" href="http://cdn.static.runoob.com/li ...
- the django travel three[form表单验证]
一:表单验证: 场景:因为浏览器的js可以被禁用,所以需要做后台的输入合法的验证. A:ajax发请求.需要注意的是ajax POST的数据的key值和form表单的里的字段名字一致,否则得不到验证! ...
- Handlebars模板引擎
介绍 Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板.它采用"Logic-less template"(无逻辑模 ...
- P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- centos安装telnet
安装环境:CentOS 6.4 上篇已经讲述了memcached的安装,现在要测试Memcached功能的时候,需要使用到telnet服务.于是就有了本篇. 一.安装telnet 1.检测t ...
- 【C++0x】表达式之类型(decltype)
C++0x引入了新的关键字decltype,它是一个操作符,用来取得表达式的类型,主要在泛型编程中使用.这里,简单介绍一下语法规则. 语法形式:decltype (expression)其中,这里 ...
- Angular7教程-01-Angular开发环境配置
本教程基于angular7(2018-11-04) 1. 安装node.js 下载地址: http://nodejs.cn/download/ 下载对应自己操作系统的版本安装即可. 2.安装 angu ...
- laravel 5.5 《电商实战 》安装应用
最近开始接触电商业务.公司打算采用lavarel做后端的开发,出于学习成本和时间的考虑.自己找到了一个不错的收费教程.这段时间会同步更新,分享自己的学习过程. 自己的开发环境,mac+nginx+my ...
- OSG漫游到指定坐标点位置
OSG中从当前场景位置漫游到指定点坐标位置,osg中场景的视口状态包括如下参数: 1.视点的位置 2.参考点的位置,该点通常为场景中的中心轴上的点 3.视点向上的方向向量 ( const osg::V ...