我正在使用

Java开发一个OpenGL项目,它已经指出了我想在我自己的代码中创建转换矩阵的地方,所以我可以使用它们来进行世界到屏幕的点转换,反之亦然.我已经创建了一个支持转换的Matrix类,这一切都很好用.但是,我实际上无法弄清楚如何创建逆变换.

所以我的问题是:

>给定一个任意仿射(4×4)变换矩阵,如何创建逆变换矩阵?一些矩阵是不可逆转的吗?反转变换矩阵有哪些限制和注意事项?

从我的研究中,我听说过各种方法,最简单的是转置然后否定矩阵.但是,这似乎并没有真正起作用.我听说这种方法对某些矩阵不起作用,甚至一些矩阵也是不可逆转的.

我正在寻找的不仅仅是“插入这个方程式”的答案,因为我实际上想要理解当我反转矩阵时会发生什么.这也排除了“只使用这个库”的答案.我将来可能会转移到矩阵库,但是现在我想自己创建它.

编辑:在有人要求之前,这不是作业.这是一个个人项目.

最佳答案 这是我在计算机图形学课程中使用的一些代码,基本上我使用高斯Jordan消除来计算矩阵的逆.对于可逆的矩阵,其行列式值必须不等于零.我没有在我的代码中处理过这种情况,我不打算为你做这一切.

Matrix4* Matrix4::FindInverse(Matrix4 &a){

int n = R;

int i = 0;

int j = 0;

float pivot = 0;

Matrix4* invA = NULL;

//TODO: Check whether the matrix is invertible.Else Return

invA = new Matrix4();

invA->SetMatrix4(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);

for(i = 0; i < n; i++){

pivot = a.v[i][i];

if(pivot != 1.0 and pivot != 0){

for(int t = i; t < n; t++){

a.v[i][t] = a.v[i][t]/pivot;

invA->v[i][t] = invA->v[i][t]/pivot;

}

}

//Update to the new pivot which must be 1.0

pivot = a.v[i][i];

for(j = 0; j < n; j++){

if( j==i ){

continue;

}

else{

float l = a.v[j][i]/pivot;

for(int m = 0; m < n; m++){

a.v[j][m] = a.v[j][m] - l * a.v[i][m];

invA->v[j][m] = invA->v[j][m] - (l * invA->v[i][m]);

}

}

}

}

return invA;

}

java如何倒置矩阵_java – 如何创建逆变换矩阵相关推荐

  1. java string对象创建对象_Java String 创建了几个对象

    我们首先来看一段代码: Java代码 String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢 ...

  2. java中写入文件_java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

  3. java 逆矩阵,java – 如何创建逆变换矩阵

    这是我在计算机图形学课程中使用的一些代码,基本上我使用高斯Jordan消除来计算矩阵的逆.对于可逆的矩阵,其行列式值必须不等于零.我没有在我的代码中处理过这种情况,我不打算为你做这一切. Matrix ...

  4. java 反编译 类名_java javassist创建类和反编译类

    public class Byte { public static void main(String[] args) throws Exception { //获得类池 ClassPool pool= ...

  5. java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  6. java定义三角类_Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点。...

    Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点. 关注:197  答案:1  mip版 解决时间 2021-01-3 ...

  7. java qq ui界面_java swing 创建一个简单的QQ界面教程

    记录自己用java swing做的第一个简易界面. LoginAction.java package com.QQUI0819; import javax.swing.*; import java.a ...

  8. java螺旋矩阵_Java 实现输出螺旋矩阵

    题目 好记性不如烂笔头,记下来 用java实现输入一个50以内的数字num,让这个num的平方数字以螺旋矩阵的方式显示在屏幕上. TIM截图20180829160501.png 图解示例:(如下图↓) ...

  9. java rsa 存数据库_java – 如何创建RSA密钥对以便将其存储在数据库中?

    我正在尝试实现变异加密算法(理论上由我开发)并作为需求的一部分,我需要生成一个RSA密钥对并将其存储在数据库中,以便以后作为加密过程的一部分进行检索(仅用于加密会话密钥,以便可以使用加密的消息安全地发 ...

最新文章

  1. 如何区分网线是几类的_认清网线的六种材质,挑选网线不再被坑
  2. 《Objective-c》-(description方法)
  3. 并发基础篇(二):Thread类的API总结
  4. 信息学奥赛C++语言:求平均分
  5. XBMC源代码分析 4:视频播放器(dvdplayer)-解码器(以ffmpeg为例)
  6. 本科自考计算机专业有哪些学校,自考本科计算机专业要学什么?广东有哪些学校可以考?...
  7. Facade(装饰模式)
  8. Extjs的文件上传问题
  9. PDMS二次开发(八)——向PDMS12.1版本迁移
  10. 平面设计的核心本质是什么
  11. 简易四六级成绩管理系统
  12. java连接打印机并进行打印
  13. 交换机、路由器、网关
  14. 母版页已经有from 一页只能有一个服务器端 Form 标记
  15. 实验一 简单io应用—流水灯控制示例程序_【正点原子FPGA连载】第十章呼吸灯实验--领航者ZYNQ之linux开发指南...
  16. 发现了一个可以让网盘加速的小工具(文末还有一个用了很久的小方法)
  17. 几个不错的开源BPM系统
  18. 一篇解决:Ubuntu安装配置、软件、工具、快捷键
  19. Python:新式类和旧式类
  20. 序列自相关矩阵的计算和分析

热门文章

  1. TortoiseSVN 与SubEclipse 相互兼容版本对应
  2. R导入CVS.文件报错Error in data[[rowvar]] : attempt to select less than one element in get1index
  3. Python学习十二:Flask框架
  4. python 分词工具对比_五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
  5. Spring分布式缓存
  6. ks检验正态分布结果_如何判断数据是否符合正态分布?
  7. Scrapy爬一下苏宁图书
  8. Android Studio基于数组适配器使用列表视图案例 —— 阅读古诗
  9. python新手怎么兼职-利用python兼职
  10. java8 手把手教你学会写lambda表达式