什么是更好的Matrixx4类设计c++新手
What is the better Matrix4x4 class design c++ newbie
使用什么方法来存储矩阵值更好?
float m1,m2,m3 ... ,m16
或
float[4][4].
我第一次尝试float[16],但当我调试和测试VS时,它不会显示数组内部的内容:(可以实现cout并尝试从控制台测试应用程序中读取答案
然后,我尝试在测试和调试中使用float m1、m2、m3等,这些值可以在VS中读取,因此使用起来似乎更容易。
我的问题是,因为我对c++相当陌生,什么是更好的设计?
我发现float m1,m2 ... ,m16
在调试时更容易使用。
如果有人能根据经验或有基准数据说什么性能更好,我也会很高兴,我的直觉认为这并不重要,因为矩阵数据应该在内存中保持不变,对吧?
编辑:更多信息它是一个列主矩阵。据我所知,我只需要一个4x4矩阵用于视图转换管道。所以没有更大的,所以我有一些常数值。
忙于编写一个简单的软件渲染器,以此来学习更多的c++,获得更多的经验,并学习/提高我的线性代数技能。可能只会使用每个片段的着色和一些简单的照明模型,到目前为止,我已经看到4x4矩阵是我渲染所需的最大矩阵。
第2版:找到了我为什么不能读取数组数据的原因——这是我使用的浮点指针,调试菜单只显示了指针值。
感谢所有回答的人,我现在将使用Vector4m[4]答案。
您应该考虑具有float [4]
成员的Vector4
和具有Vector4 [4]
成员的Matrix4
。使用operator []
,您有两个有用的类,并可以使用以下方法访问元素:[i][j]
-在大多数情况下,如果不使用virtual
方法,元素数据将是连续的。
您也可以通过这种方式从矢量(SIMD(指令中获益,例如在Vector4
中
union alignas(16) { __m128 _v; float _s[4]; }; // members
inline float & operator [] (int i) { return _s[i]; }
inline const float & operator [] (int i) const { return _s[i]; }
和在Matrix4
中
Vector4 _m[4]; // members
inline Vector4 & operator [] (int i) { return _m[i]; }
inline const Vector4 & operator [] (int i) const { return _m[i]; }
float m1, m2 .. m16;
在使用循环迭代时变得非常难以处理。使用某种数组要容易得多。而且,最有可能的是,当您使用循环时,编译器将生成至少与"手动代码"一样高效的代码,除非您实际编写内联汇编程序或使用SSE内部函数。
只要代码不进化,16浮点解决方案就可以(维护起来很麻烦,而且可读性不强(
float[4][4]是一种更好的设计(就大小参数化而言(,但您必须理解指针的概念。
我会使用float m[16];
这样的16个浮点数组,唯一的原因是使用Matrix4fv后缀函数可以很容易地将其传递给openGL这样的库。
像float m[4][4];
这样的2D阵列也应该在内存中与float m[16]
相同地配置(请参阅我是否可以将2D阵列视为连续的1D阵列?(,并且只要具有[row][col]
(或[col][row]
,我不确定在openGL方面哪一个是正确的(索引(比较m[1][1]
和m[5]
(,使用它会更方便。
对矩阵元素使用单独的变量可能会有问题。在处理100x100这样的大矩阵时,您打算做什么?
当然,你需要使用一些类似数组的结构,我强烈建议你至少使用数组
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我是编程新手
- C++新手,想知道如何使用VS code 2019播放音频文件
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 如何正确解析子字符串,以便它们对我的新手计算器有效?
- 我是C++新手,我想知道,为什么在c ++中使用纯虚函数?为什么要使用纯虚函数?
- 结构新手,我对如何从 void 函数中返回值并将其放入另一个函数感到困惑
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)
- 我是 C++ 的新手,我试图调用 make 一个以 2 个类作为其参数的类构造函数
- 作为一个C++新手,我遇到了麻烦
- 如何一步一步地正确解释此代码?(编程新手)
- 什么是"MFC Dialog Extension"?(Windows/C++ 新手 - Linux 背景)
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- C++浮点数与双胞胎设置精度奇数(新手)
- C++新手的类成员函数
- 编码新手需要有关 if 语句的帮助
- 我是 c++ 编程的新手,我一直在做以下任务:
- C++的新手试图弄清楚类约定