当前位置: 首页 > news >正文

【Mathematics】椭圆眼睛跟随鼠标交互中的仿射变换数学推导

椭圆眼睛跟随鼠标交互中的仿射变换数学推导

摘要

本文详细分析了在Processing环境中实现椭圆眼睛跟随鼠标交互功能的数学原理,重点阐述了通过仿射变换将椭圆坐标系转换为圆形坐标系的核心算法。通过严谨的数学推导,证明了该变换方法的正确性和有效性,为计算机图形学中的类似问题提供了理论参考。
在这里插入图片描述

1. 引言

在计算机图形学中,实现图形对象对用户输入的精确响应是一个基础而重要的问题。本文研究的具体问题是:如何在椭圆区域内实现一个圆形眼珠跟随鼠标移动,且保证眼珠始终不超出椭圆边界。传统方法直接处理椭圆边界条件较为复杂,本文采用仿射变换技术,将椭圆坐标系转换为圆形坐标系,从而简化计算。

2. 问题描述与符号定义

设椭圆眼睛E的中心坐标为(xe,ye)(x_e, y_e)(xe,ye),半长轴为aaa(x轴方向),半短轴为bbb(y轴方向)。椭圆的标准方程为:

(x−xe)2a2+(y−ye)2b2=1\frac{(x - x_e)^2}{a^2} + \frac{(y - y_e)^2}{b^2} = 1a2(xxe)2+b2(yye)2=1

鼠标位置为M=(xm,ym)M = (x_m, y_m)M=(xm,ym),眼珠半径rp=a⋅pupilScaler_p = a \cdot \text{pupilScale}rp=apupilScale,其中pupilScale∈(0,1)\text{pupilScale} \in (0,1)pupilScale(0,1)为眼珠相对于眼睛大小的比例系数。目标是计算眼珠中心位置P=(xp,yp)P = (x_p, y_p)P=(xp,yp),使得眼珠始终停留在椭圆边界内部,并尽可能跟随鼠标方向。

3. 仿射变换原理

3.1 坐标变换

为了简化计算,我们通过仿射变换将椭圆映射为圆形。定义缩放因子kkk和新坐标系(X,Y)(X,Y)(X,Y)

k=abk = \frac{a}{b}k=ba

X=x−xeX = x - x_eX=xxe

Y=k⋅(y−ye)=ab(y−ye)Y = k \cdot (y - y_e) = \frac{a}{b}(y - y_e)Y=k(yye)=ba(yye)
在这里插入图片描述

3.2 椭圆到圆的映射验证

在原椭圆坐标系中,椭圆方程为:

(x−xe)2a2+(y−ye)2b2=1\frac{(x - x_e)^2}{a^2} + \frac{(y - y_e)^2}{b^2} = 1a2(xxe)2+b2(yye)2=1

代入变换关系:

X2a2+(Yk)2b2=X2a2+Y2k2b2\frac{X^2}{a^2} + \frac{\left(\frac{Y}{k}\right)^2}{b^2} = \frac{X^2}{a^2} + \frac{Y^2}{k^2 b^2}a2X2+b2(kY)2=a2X2+k2b2Y2

由于k=abk = \frac{a}{b}k=ba,则k2b2=a2k^2 b^2 = a^2k2b2=a2,因此:

X2a2+Y2a2=1\frac{X^2}{a^2} + \frac{Y^2}{a^2} = 1a2X2+a2Y2=1

即:

X2+Y2=a2X^2 + Y^2 = a^2X2+Y2=a2

这确实是一个半径为aaa的圆方程。因此,通过此仿射变换,椭圆被映射为半径为aaa的圆形。
在这里插入图片描述

4. 眼珠位置计算

4.1 鼠标位置变换

鼠标位置M=(xm,ym)M = (x_m, y_m)M=(xm,ym)在变换后的坐标系中为:

Xm=xm−xeX_m = x_m - x_eXm=xmxe

Ym=ab(ym−ye)Y_m = \frac{a}{b}(y_m - y_e)Ym=ba(ymye)

变换后鼠标点M′=(Xm,Ym)M' = (X_m, Y_m)M=(Xm,Ym)到圆心(0,0)(0,0)(0,0)的距离为:

d=Xm2+Ym2d = \sqrt{X_m^2 + Y_m^2}d=Xm2+Ym2

4.2 眼珠边界条件

在变换后的圆形坐标系中,眼珠是一个半径为rp=a⋅pupilScaler_p = a \cdot \text{pupilScale}rp=apupilScale的圆。眼珠中心P′=(Xp,Yp)P' = (X_p, Y_p)P=(Xp,Yp)必须满足不超出圆形边界的条件。

眼珠完全位于圆形眼睛内部的条件是眼珠中心到圆心的距离不超过a−rpa - r_parp。因此,我们分两种情况讨论:
在这里插入图片描述

情况一:鼠标在安全区域内

d≤a−rpd \leq a - r_pdarp时,鼠标位于安全区域内,眼珠中心可以直接跟随鼠标位置:

Xp=XmX_p = X_mXp=Xm

Yp=YmY_p = Y_mYp=Ym

情况二:鼠标在安全区域外

d>a−rpd > a - r_pd>arp时,鼠标位于安全区域外,眼珠中心应位于从圆心指向鼠标方向的射线上,且与圆心的距离为a−rpa - r_parp

首先计算单位方向向量:

u=(Xmd,Ymd)\mathbf{u} = \left( \frac{X_m}{d}, \frac{Y_m}{d} \right)u=(dXm,dYm)

则眼珠中心位置为:

Xp=ux⋅(a−rp)=Xmd⋅(a−rp)X_p = \mathbf{u}_x \cdot (a - r_p) = \frac{X_m}{d} \cdot (a - r_p)Xp=ux(arp)=dXm(arp)

Yp=uy⋅(a−rp)=Ymd⋅(a−rp)Y_p = \mathbf{u}_y \cdot (a - r_p) = \frac{Y_m}{d} \cdot (a - r_p)Yp=uy(arp)=dYm(arp)

4.3 坐标逆变换

将眼珠位置P′=(Xp,Yp)P' = (X_p, Y_p)P=(Xp,Yp)从圆形坐标系变换回原始椭圆坐标系:

xp=Xp+xex_p = X_p + x_exp=Xp+xe

Yp=ab(yp−ye)Y_p = \frac{a}{b}(y_p - y_e)Yp=ba(ypye)可得:

yp=Yp⋅ba+yey_p = \frac{Y_p \cdot b}{a} + y_eyp=aYpb+ye
在这里插入图片描述

5. 算法总结

基于上述推导,椭圆眼睛跟随鼠标的完整算法可总结如下:

输入参数:椭圆中心(xe,ye)(x_e, y_e)(xe,ye),半长轴aaa,半短轴bbb,眼珠比例系数pupilScale\text{pupilScale}pupilScale,鼠标位置(xm,ym)(x_m, y_m)(xm,ym)

计算步骤:

  1. 计算眼珠半径:rp=a⋅pupilScaler_p = a \cdot \text{pupilScale}rp=apupilScale
  2. 计算缩放因子:k=abk = \frac{a}{b}k=ba
  3. 变换鼠标坐标:
    Xm=xm−xeX_m = x_m - x_eXm=xmxe
    Ym=k⋅(ym−ye)Y_m = k \cdot (y_m - y_e)Ym=k(ymye)
  4. 计算变换后距离:d=Xm2+Ym2d = \sqrt{X_m^2 + Y_m^2}d=Xm2+Ym2
  5. 计算变换后眼珠位置:
    • d≤a−rpd \leq a - r_pdarp
      Xp=XmX_p = X_mXp=XmYp=YmY_p = Y_mYp=Ym
    • 否则:
      Xp=Xmd⋅(a−rp)X_p = \frac{X_m}{d} \cdot (a - r_p)Xp=dXm(arp)Yp=Ymd⋅(a−rp)Y_p = \frac{Y_m}{d} \cdot (a - r_p)Yp=dYm(arp)
  6. 逆变换得到最终眼珠位置:
    xp=Xp+xex_p = X_p + x_exp=Xp+xe
    yp=Ypk+ye=Yp⋅ba+yey_p = \frac{Y_p}{k} + y_e = \frac{Y_p \cdot b}{a} + y_eyp=kYp+ye=aYpb+ye

输出:眼珠中心位置(xp,yp)(x_p, y_p)(xp,yp)

6. 结论

本文通过严谨的数学推导,证明了使用仿射变换将椭圆坐标系转换为圆形坐标系的方法在椭圆眼睛跟随鼠标交互问题中的有效性。该方法通过坐标变换将复杂的椭圆边界检测简化为圆形边界检测,显著降低了计算复杂度,同时保证了眼珠移动的自然性和准确性。

该算法不仅适用于本文讨论的特定问题,还可推广到其他需要处理椭圆边界条件的计算机图形学应用中,具有较高的实用价值和理论意义。

参考文献

[1] Foley J. D., van Dam A., Feiner S. K., Hughes J. F. Computer Graphics: Principles and Practice, Addison-Wesley, 1990.

[2] Schneider P. J., Eberly D. H. Geometric Tools for Computer Graphics, Morgan Kaufmann, 2003.

[3] Processing Foundation. Processing Reference, https://processing.org/reference, 2023.

http://www.dtcms.com/a/506877.html

相关文章:

  • 【u-boot】u-boot的分区支持
  • CG-FS-A3 风速传感器 485型 体积小巧 便捷安装 三杯式 聚碳材质
  • http和https区别如何转https
  • 国外的主要电机生产厂商
  • 英伟达公司发展历史
  • 网站首页文件名通常是无锡市建设安全监督网站
  • SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
  • Linux中匿名设备和安全相关以及VFS的slab缓存对象创建
  • B.NET编写不阻塞UI线程的同步延时
  • 论文泛读:DYNAPROMPT: DYNAMIC TEST-TIME PROMPT TUNING(动态测试时调优)
  • 做 58 那样的网站北京公司网页设计
  • PyTorch实战(9)——从零开始实现Transformer
  • 18.SELInux安全性
  • Layui连线题编辑器组件(ConnectQuestion)
  • 电影网站加盟可以做么网奇seo培训官网
  • 【Linux】Socket编程TCP
  • Debian编译Qt5
  • [3-03-01].第07节:搭建服务 - 服务重构cloud-consumer-ocommon
  • Ubuntu Certbot版本查询失败?Snap安装后报错终极修复指南(通用版)
  • Kafka底层解析:可靠性与高性能原理
  • 分布式链路追踪中的上下文传播与一致性维护技术
  • 为已有nextjs项目添加supabase数据库,不再需要冗余后端
  • 网站建设怎样上传程序微信网站搭建多少钱
  • rabbitmq在微服务中配置监听开关
  • 下一代时序数据库标杆:Apache IoTDB架构演进与AIoT时代的数据战略
  • k8s中的控制器
  • Blender入门学习02
  • 动态规划的“数学之魂”:从DP推演到质因数分解——巧解「只有两个键的键盘」
  • Blender入门学习01
  • 网站开发word文档精品简历模板网站