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

Standardize 2D/3D Vector / Coordinate Class

问题
这件事困扰了我一段时间,但我找不到明确的答案:

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

推理/背景
到目前为止,我已经看到了数十个库和框架(无论是图形、物理、数学、导航、传感器融合……),它们基本上都实现了自己的

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

and/or 它的 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 将是一个可接受的解决方案,尤其是因为它会附带一个简单的迭代器实现,但我个人更喜欢 class 有 x、y(和 z)个成员。

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

are there any good reasons (aside from no one having the time) why this hasn't already been done?

基本上没有理由这样做。

形成一个包含两个或三个元素的类型非常简单,所有操作也可以简单定义。此外,C++ 标准库无意成为一个通用的数学工具包:如果你认真对待数学类型和构造,而不是你可以放在一起的函数和运算符,那么使用专门的第三方库是有意义的半个小时。

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

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

但是,如果您对此有强烈的感觉,可以在所有专家(当然还有一些非专家)居住的 std-discussion 上开始对话;有时这样的对话会导致提案的形成,而最终写的不一定是你。

如果其他人对此感兴趣,我想指出 "A Proposal to Add 2D Graphics Rendering and Display to C++" 的 2014 年 7 月版本包含一个二维点 class / 结构(我的问题是基于最初的2014 年 1 月的草案)。所以也许在 c++1z 中至少会有一个简单的标准 2D-Vector。