标准化2D / 3D矢量/坐标类

麦克·麦克

问题
这是困扰我一段时间的事情,但是我找不到确切的答案:

  • 是否有人知道将标准2D和/或3D向量(具有x,y和z成员的结构)引入STL的提议?
  • 如果不是,是否有一种切实可行的方法可以将此类引入到下一版标准中-自己自己编写完整而完美的提案?
  • 而且,除了没有人有时间之外,还有什么很好的理由为什么没有做到这一点?

我当然愿意为此做出贡献,但是我相信我缺乏生产足够高质量的东西被接受的经验(我不是专业的程序员)。

推理/背景知识
到目前为止,我已经看到了数十个库和框架(用于图形,物理,数学,导航,传感器融合...),它们基本上实现了自己的版本

struct Vector2d {
    double x,y;
    //...
};
/* ...
 * operator overloads
 */

和/或其等效的3D版本-更不用说在所有情况下,在我花时间制作一个合适的,可重复使用的版本之前,我自己实现了一个。
显然,这并不困难,我不必担心实现效果不是很理想,但是每次,我想合并两个库或重用来自不同项目的代码,就必须将一个版本转换为另一个版本(强制转换或(如果可能)替换文字)。

现在,委员会致力于为c ++ 17(尤其是2D图形框架)扩展标准库,我真的很想从一开始就将通用的2D矢量烘焙到所有接口中,所以我可以编写例如:

drawLine(transformCoordinates(trackedObject1.estimatePos(),params), 
         transformCoordinates(trackedObject2.estimatePos(),params));

而不是

MyOwnVec2D t1{trackedObject1.estimatePosX(), trackedObject1.estPosY()};
MyOwnVec2D t2{trackedObject2.estimatePosX(), trackedObject2.estPosY()};

t1 = transformCoordinates(t1,params);
t2 = transformCoordinates(t2,params);

drawLine(t1.x,t1.y,t2.x,t2.y);

该示例可能有点夸张,但我认为这表明了我的观点。

我知道std::valarray,它已经朝着正确的方向发展,因为它允许进行加法和乘法之类的标准操作,但是如果您需要的只是两个或三个坐标,那么它的权重就太大了。我认为具有固定大小且没有动态内存分配(例如,基于std::array的valarray是可以接受的解决方案,特别是因为它带有琐碎的迭代器实现,但是我个人更喜欢带有x,y(和z)的类成员。

备注:很抱歉,如果这个话题已经讨论过(如果没有讨论,我会感到惊讶),但是每次我搜索2d向量时,我都会得到谈论类似std::vector<std::vector<T>>或如何实现某种转换的结果,但没有关于标准化的话题。

轨道轻赛

有没有什么充分的理由(除了没有人有时间之外)为什么还没有这样做呢?

基本上没有理由这么做。

形成一个包含两个或三个元素的类型是非常琐碎的,所有操作也可以被简单定义。此外,C ++标准库并非旨在用作通用的数学工具集:如果您对数学类型和构造超出了可以放在一起使用的函数和运算符的重视,那么使用专门的第三方库是有意义的半小时。

而且我们不对不需要标准化的东西进行标准化。

如果C ++要获得某种标准化的3D图形API,那么我可以看到这种变化,但直到那时才有所变化。希望C ++永远不会获得任何标准化的3D图形API,因为这不是它的用途。

但是,如果您对此有强烈的信心,可以在所有专家(和某些肯定是非专家)居住的std讨论进行对话有时,这样的对话会导致提案的形成,最终写出提案的不一定是您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章