关于WII光枪定位的设计(转)

方法1. 简单1 LED方法

这是一个很忽悠的方法,把LED看成是屏幕中心,把光枪摄像头的视野范围看作是屏幕范围。

假设WII枪头摄像头的数据范围为[0,1024]*[0,768],显示器屏幕分辨率为dx,dy。如果从手柄获取到的坐标值为x,y,则对应的屏幕位置为(x*dx/1024,y*dy/1024)。LED的位置放在屏幕中间最好,放在边缘也不差。如果给定人所站位置及屏幕大小等数据,那么可以得到精确的打法。

方法2. 貌似是官方的2LED方法

使用2 LED。感觉跟上面的方法原理类似,由于是2LED,所以还能多识别枪的旋转方向。2LED的位置放在屏幕上方或下方中间。

参考:

wiki - wiimote/pointing

---http://www.wiibrew.org/wiki/Wiimote/Pointing

A Better Wiimote Pointer

----http://blog.dawnofthegeeks.com/?p=496

 

上面两种方法的精确度改进

上面两种方法都是不精确的,没有定位过程和关于屏幕分辨率的设置。为了加强使用体验,我发现了一个来自http://www.davidhawley.co.uk/WiiSensorBar.aspx的文章《Make your Wiimote aim accurately and how the Wii sensor bar works with widescreen tv‘s》。按照里面的方法,可以通过修改人距离屏幕的距离或者LED间距离来改良精确度。最赞的是,页面里还包含了一个计算器,直接看图:

 

方法3:我的精确方法

假设1:2(不够求解就用3)个LED与屏幕处于同一个平面,令该平面为X-Y平面。

假设2枪使用总是平衡的。(如果这个不假设的话,可以多加LED或者使用枪内置的加速度传感器的数据也可以,不过暂不确定加速度传感器的精确程度)

那么要解决的问题有2个:

问题1如果枪所在点为(x,y,z)且方向为(n,m,p),那么通过这条直线的方程及平面方程Z=0就可以求得枪射在X-Y平面上的位置。

如何求x,y,z,n,m,p这6个值?有些值是可以直接固定的,例如方向不考虑大小则可以令p=1。当然,基本解决思路是用待定系数法。 系数法中的方程来源:有方向向量(n,m,p)及A,B,可以求出新的方向向量P(下面有解释)。其中A,B是枪头摄像头所获得的某LED的x,y坐标点转化得到的该LED到枪与枪所指方向的x,y轴方向的偏移角度。这样,用P和点(x,y,z)可以得到某LED的坐标值(这个已知),那么可以两个方程。

问题2通过开始对屏幕的四个角分别开一枪得到四角的X-Y坐标值,以及通过获取屏幕的分辨率,那么以后得到的X-Y坐标值就可以通过映射转换到屏幕分辨率值。如何转换,没思考下去,应该挺简单的。

当前遇到的问题是: 有方向向量(n,m,p), 给出A,B后, 如何求出新的方向向量P?

为了解释下A,B,是什么,看下面新的坐标系。

如果用这个新的坐标系来解释A、B的话。方便点,左边箭头轴是X‘,上箭头是Y‘,斜的那个是Z‘。  那么向量P在Z‘Y‘上投影与Z‘轴正方向的夹角为A,在Z‘X‘上投影与Z‘轴正方向的夹角为B。

待续。。。

特别鸣谢:

其实1LED方法是追不了月的名字很长的火云大爷最先提出的而我在后面看到2LED方法时才决定使用的,虽然说理论上有明显的缺陷,但是实际效果还不错。另外他还提出了一个很忽悠的理论上都还不知道怎么求解的2LED方法,这里就略过了。

非常感谢小罗同学在这个问题上花费了不少时间并在最后给我指出了这个问题其实不是那么容易解决的,于是我想到下次可以试试用数值方法去求解。

时间: 2024-10-08 11:13:01

关于WII光枪定位的设计(转)的相关文章

游戏光枪的三十年历史

游戏光枪的三十年历史 一句话看专题:今年是FC光枪问世的三十周年纪念,让我们来说说这款周边的种种故事. 光枪和游戏的天作之合 作为游戏史上最著名的外设之一,光枪(Light gun)的历史实际上远比电子游戏本身还要来得久远,最早甚至可以追溯到上世纪三十年代.在电子游戏的概念出来之前,以机械结构为主的光枪游戏就已经风靡一时,在大型游乐园里成为一般人模拟射击体验的方便道具. 六.七十年代后,随着第一批电子游戏的陆续诞生,光枪周边很快就成为电子游戏最合适的搭档,光枪游戏(Light gun shoot

汽车车牌定位识别系统的设计实现

http://www.eeworld.com.cn/qrs/2015/1023/article_25403.html 一.项目背景及可行性分析 2.1 项目背景及技术难点 项目名称:智能交通:汽车车牌定位识别: 项目内容:本项目是在FPGA前端实时完成图像采集.预处理.车牌定位和字符分割以及数据传输工作,在后端完成车牌字符识别工作.FPGA接收采集的实时图像,在内部采用流水线方式依次完成图像预处理.车牌定位和车牌字符分割工作,最后通过高速USB端口将已分割字符传输到后端进行字符识别.其中,图像采

基于Wi-Fi的室内定位在美团总部的实践和应用

作者:张小美 室内定位技术的商业化必将带来一波创新高潮,尤其是在 O2O 领域,各种基于此技术的应用将出现在我们的面前.我们可以想象一些比较常见的应用场景,比如在大型商场里面借助室内导航快速找到目标商铺,商店根据用户的具体位置向用户推送更多关于商品的介绍等等,这些应用会极好的服务于 O2O,提高用户体验. 目前室内定位技术有很多,如A-GPS.蓝牙.超声,红外.信标.射频.Wi-Fi.计算机视觉等,这些技术综合比较,其中以基于 Wi-Fi 的室内定位技术最为突出,无论从硬件投入.软件投入.实施难

游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路

附     文   文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行——本来几个数据就能弄好的东西,我不得不用文字把他们阐述清楚(可是如果不说清楚,只留下一串数据那就毫无意义可言——比如RPG中装备掉落率,如果不说清楚的掉落率的来源根据,仅仅一个数值有什么意义呢?),所以导致文档变得长而又长 虽然说是数值相关的文档,但本文更多地还是以用户及游戏性 (付费)为导向来说明数值方案

EasyPR--开发详解(5)颜色定位与偏斜扭转

转自https://www.cnblogs.com/subconscious/p/4351007.html 让我们先看一下示例图片,这幅图片中的车牌通过颜色的定位法进行定位并从偏斜的视角中扭正为正视角(请看右图的左上角). 图1 新版本的定位效果 下面内容会对这两个特性的实现过程展开具体的介绍.首先介绍颜色定位的原理,然后是偏斜扭正的实现细节. 由于本文较长,为方便读者,以下是本文的目录: 一.颜色定位 1.1起源 1.2方法 1.3不足与改善 二.偏斜扭正 2.1分析 2.2ROI截取 2.3

[Architecture Design] 跨平台架构设计

[Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微软在2011年所描绘的未来生活蓝图.在观看的过程中,请大家以「软件开发人员」的角度来思考,想想软件开发人员在其中扮演甚么样的角色. 「Productivity Future Vision 2011」 这段影片里面所描绘未来产品,把时间轴拉到现在来看,其实有许多概念已经悄悄融入我们的生活之中.像是影片

我是如果设计文件系统 LFS 的

LFS 超快的文件系统,可以同时存储海量大文件和小文件.并且不单单是一个文件系统,我还用作了数据库. 我的测试数据是:和 C 直接读写文件速度几乎一样. 项目地址:github  [email protected] 注:这是一个开源项目,你可以自由使用,但对于开发者,我们需要审核,确认是否能承担开发工作.所以,需要 @ME. 在设计之前,需要明确两个目标:高并发,超快读写. 为了实现高并发,那么必须将每个并发进行分离,各自做自己的工作,互不影响.意味着 A 和 B 可以同时读相同的或者不同的文件

移动定位服务将引领手机新革命(转来的)

多年以来,人们打电话的时候都会问对方:“现在能听到我说话吗?”不久之后,人们的问题就会变成:“现在能找到我吗?”. 过去几年来,手机领域正在悄悄发生着一场变革,也就是所谓的“移动定位服务(location-based services)”,业内人士将其称作是LBS.新一代智能手机能够利用全球定位系统(GPS)或无线网络来精准定位用户的位置,而这也催生了一股创新浪潮. 移动定位服务的爆炸式增长是多种趋势共同作用的结果.首先,智能手机,尤其是iPhone的快速普及,成为这一领域最为引人注目的趋势.其

一步一步实现基于Task的Promise库(三)waitFor方法的设计

在上一篇中我们已经完成了Task.js里面的all和any方法,已经可以完美的解决大部分需求,我们再来看一个需求: 我们要先读取aa.txt的内容,然后去后台解析,同时由用户指定一个文件,也要读取解析,然后当两个文件都解析完了,我们还要合并两部分内容存到cc.txt中,最后发个通知说ok了.. 这里的用户是指真正浏览网页的用户,可能是说让用户上传一个文件去读取解析,但是aa.txt是程序定好了的,我们也不希望用户上传文件之后再去读取解析aa.txt,怎么办?如果有一个waitFor方法可以等待另