NSLog matrix_float4x4 或 simd::float4x4

Posted

技术标签:

【中文标题】NSLog matrix_float4x4 或 simd::float4x4【英文标题】:NSLog matrix_float4x4 or simd::float4x4 【发布时间】:2015-04-09 08:06:36 【问题描述】:

Apple 没有提供类似于“OpenCV”或“Eigen”的加速矩阵调试工具吗?

Eigen 和 OpenCV 如何打印矩阵的示例代码

Eigen::Matrix4f matrix;
std::cout << matrix << std::endl;

4x4 矩阵的输出

-0.483662   0.86859   0.10781   51.8456
 0.865028  0.455597  0.210137   29.6781
 0.133405  0.194894 -0.971709    192.69
        0         0         0         1

我想要的粗略近似,但还不够笼统。

这是我的快速和肮脏的版本。我最终可能会在处理 C 或 C++ 版本的地方使它更彻底,但我真的希望 Apple 提供它,我只是没有找到文档。

void logSIMD(const simd::float4x4 &matrix) 

   std::stringstream output;
   int columnCount = sizeof(matrix.columns) / sizeof(matrix.columns[0]);
   for (int column = 0; column < columnCount; column++) 
      int rowCount = sizeof(matrix.columns[column]) / sizeof(matrix.columns[column][0]);
      for (int row = 0; row < rowCount; row++) 
         output << std::setfill(' ') << std::setw(9) << matrix.columns[column][row];
         output << ' ';
      
      output << std::endl;
   
   output << std::endl;
   NSLog(@"%s", output.str().c_str());

有没有人为 Accelerate 中各种大小的矩阵和向量的 C/C++ 打印提供通用解决方案,或者 Apple 提供了我还没有找到的功能?

【问题讨论】:

【参考方案1】:

&lt;simd/simd.h&gt; 没有提供此类功能。这有一些很好的理由,最重要的是,人们对于如何格式化向量和矩阵非常固执己见,所以没有提供的格式将是一小部分用户真正想要的,而且它足够直截了当编写您自己的打印例程,完全按照您的要求进行操作。一个可以处理任意用户定义格式的完全通用的格式化函数会更合理,但与&lt;simd/simd.h&gt; 接口的其余部分相比,它的重量会非常大,所以它看起来也不太合适。

也就是说,如果您认为这些作为 API 有用,并且您可以提出一个令人信服的理由来说明为什么您的首选格式是正确的标准化格式,我建议您向 Apple 报告一个错误,请求该功能.

【讨论】:

即使存在 simd.h 格式化程序,也没有什么能阻止人们编写自己的格式化程序。这为我们这些不关心或有比自己动手做更好的事情的人提供了一个不错的选择。

以上是关于NSLog matrix_float4x4 或 simd::float4x4的主要内容,如果未能解决你的问题,请参考以下文章

旋转矩阵未正确应用于向量

Swift 3:如何在48字节的CFData中访问matrix_float3x3的值?

Xcode 9,我的 NSLog() 去哪儿了?未在 Xcode 控制台或 Console.app 中显示

译STM32L4x6系列用户手册第四章 - 防火墙(FireWall)

NSLog(@"%s", __PRETTY_FUNCTION__) 是不是有 Swift 替代方案

NSLog函数名文件名和行号