趣味数学——线性变换可视化交互系统

本文利用Processing平台开发了一款线性变换可视化系统,旨在以交互方式帮助理解线性代数。系统包含展览和游戏两种模式,其中游戏模式允许用户通过调整矩阵操控黑洞影响行星。核心技术包括向量、粒子和引力的计算。通过矩阵乘法、线性插值等方法实现网格和粒子的动态变换,展示了数学的趣味性和艺术性。
摘要由CSDN通过智能技术生成

简介

本文介绍了使用 Processing 平台开发的线性变换可视化系统。该系统主要用于帮助建立对线性代数的直观映像,改变人们认为数学是枯燥乏味的传统印象。使用到的技术来自于《代码本色》。
主要内容有
线性代数,向量,粒子,力。

设计思路

设计灵感来自于3B1B的线性代数教学。
系统分为两种模式,一种是展览模式,使用者可以通过调整矩阵的数值来改变网格的形态;第二种是游戏模式,设计初衷是希望人们可以通过更有趣的方式来认识线性变换究竟是怎么个变换法。

模式介绍
展览模式
用于建立对线性变换的直观映象。
线性变换
游戏模式
用更具趣味性的方式来学习线性变换,玩家需要通过改变矩阵数值来操纵黑洞,“摧毁”行星。
总体游戏体验就像是在捞金鱼,只不过捞鱼的工具是黑洞,金鱼是行星而已。
黑洞捞金鱼
GUI界面以及操作介绍
开关用于切换模式
下拉栏是一些预设好的空间变换方式,例如逆时针旋转90度,剪切,放大两倍或者翻转
四个滑条控制矩阵的四个数值
下方的数字是你用黑洞“摧毁”的行星
UI

实现技术

向量

向量是本系统的核心技术,网格点位置的存放以及线性变换,粒子的移动,引力的实现都离不开它。以下是应用说明:
1、实现网格的变换是通过线性变换,即矩阵乘法得到新的点向量位置然后用线性插值一步步变过去的,这和我上学期设计的形态学变化系统原理是一致的。
2、粒子的移动由更新其位置向量实现,而粒子移动的方向和快慢是通过计算引力,加速度和速度三者的关系并实时更新来实现的。
3、引力的实现简单来说就是先得到行星中心指向黑洞中心的单位向量,然后乘以用引力公式计算得到的引力数值实现的。

粒子

本系统使用粒子系统来实现行星的绘制。粒子中包含有单个行星的一切信息,包括位置,受到的黑洞引力,速度,加速度,颜色,存在时间等等,行星和黑洞的质量等。

引力的实现还是比较简单的,具体原理已经在向量 应用说明 3 中说明了。

代码

开发平台 Processing 3.5

矩阵乘法
事实上,在Processing中实现线性变换是有一点复杂的,因为其Y轴坐标和笛卡尔坐标系刚好相反,因此,要在矩阵乘法的前后进行相应的转换来解决这一问题。

float[] matMult(float mat1[][], float mat2[])
{
   
  float[] mat3 = {
   0,0};
  // fix the y-axis step1
  mat2[1] = -mat2[1];
  for(int i=0;i<2;i++){
   
    for(int j=0;j<2;j++){
   
      mat3[i] += mat1[i][j]*mat2[j];
    }
  }
  // fix the y-axis step2
  mat3[1] = -mat3[1];
  return mat3;
}

网格规则
线性变换的特点是原点不变,以及网格线之间保持平行等距关系。因此,要先规定网格点中各个向量的连线规则,使其始终可以保持上述特点。
另外,单位向量i, j的绘制方式同理,这里就不细说了。

void drawGrid(A
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值