ide*_*n42 0 types linear-algebra rust
我正在寻找一些在空间中使用2D和3D点或方向的小型库
(矢量/矩阵感中的矢量,而不是Rust的Vec).
Rust不会在这里施加规则,所以你可以创建一个浮点元组,或者一个struct带有x, y, z成员的新元组.或单个data: [f64; 3]成员.
我想定义一个类型,而不是在这里使用的原因[f64; 3],就是这样我就可以宣布方法,例如length,normalized也Add,Sub运营商.
什么是宣布小型2D-3D固定大小数据类型的良好基础?
请注意,虽然有很好的现有库,但我想编写自己的库,因为它只需要一些基本操作,我想了解内部发生的事情.
这个问题相当广泛,没有明确的最佳表达方式来表达你想要的东西.这很大程度上取决于你打算用它做什么.
与其他答案相比,我会提出一个稍微不同的解决方案:使用带有x, y, z组件的结构并在最大程度上使用强类型.
矢量可以用来表示很多东西(点,颜色......); 你在谈论太空中的2D和3D点.首先要注意的是点向和向量向量之间的差异.这是math.stackexchange的一个很好的答案,它很好地解释了这个主题.
这种差异可以反映在类型系统中以捕获逻辑错误.这正是cgmath在做什么.所以我要说你实际上想要两种类型定义如下:
struct Point3 {
pub x: f32,
pub y: f32,
pub z: f32,
}
Run Code Online (Sandbox Code Playgroud)
v.x比v.0或更清晰v[0].如果你有一个矢量类型来表示任意数据,后两种情况是合适的.但正如我所提到的,我认为强打字是一个很好的选择,我们应该相应选择好名字.pub?为什么不?如果你在谈论空间中的点或方向,则没有无效的向量(忽略NaN浮点值).因此,没有理由限制对字段的访问.f32?好问题......实际上你应该使用一个类型参数,但是你需要有某种特质限制............这让我得出你不喜欢的结论:我认为这样做是正确的,"惯用"需要在这种情况下做一些工作.这项工作由图书馆完成cgmath.这个cgmath库特别有一个非常好的API设计,IMO.大多数功能都是通过特征(如VectorSpace)来实现的,这些特征反映了它背后的一些数学.我也想为自己的项目自己编写矢量类型,但我最终确信使用经过良好测试,设计良好的库.
那么如何"正确"呢?它是如何cgmath做到的:
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |