[英]Standardize 2D/3D Vector / Coordinate Class
題
這有點困擾我一段時間了,但我找不到一個確定的答案:
我絕對願意做出貢獻,但我相信我缺乏足夠高質量的東西才能被接受(我不是專業程序員)。
推理/背景
到現在為止,我已經看到了幾十個庫和框架(無論是圖形,物理,數學,導航,傳感器融合等......)都基本實現了自己的版本
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
,它已經朝着正確的方向前進,因為它允許標准操作,如加法和乘法,但如果你只需要兩個或三個坐標,它就會帶來太多的重量。 我認為一個具有固定大小且沒有動態內存分配的valarray(例如基於std::array
)將是一個可接受的解決方案,特別是因為它會帶有一個簡單的迭代器實現,但我個人更喜歡帶有x,y的類(和z)成員。
備注 :如果這個話題已經討論過,我很抱歉(如果沒有,我會感到驚訝),但每次我搜索2d向量時,我都會得到類似std::vector<std::vector<T>>
或如何實現某種轉換,但沒有關於標准化的話題。
有什么好的理由(除了沒有人有時間)為什么還沒有這樣做?
基本上沒有理由。
形成包含兩個或三個元素的類型是完全無關緊要的,並且所有操作也可以簡單地定義。 此外,C ++標准庫並不是一個通用的數學工具套件:如果您認真考慮數學類型和構造超出函數和運算符,那么使用專用的第三方庫是有意義的。半小時。
而且我們沒有標准化不需要標准化的事情。
如果C ++獲得某種標准化的3D圖形API,那么我可以看到這種變化,但直到那時。 並且希望C ++永遠不會獲得任何類型的標准化3D圖形API,因為它不是它的用途。
但是,如果你對此有強烈的興趣,你可以開始討論所有專家(以及一些肯定是非專家)生活的std討論 。 有時,這樣的對話會導致提案的形成,並且不一定是你最終寫出來的。
如果其他人對它感興趣,我想指出2014年7月版“將2D圖形渲染和顯示添加到C ++的建議”包括2D點類/結構(我的問題是基於初始草案從2014年1月起)。 所以也許在c ++ 1z中至少會有一個簡單的標准2D-Vector。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.