
euclid库(完成)
文章平均质量分 71
rust 基本CAD库
liuyuan77
rust爱好人员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【euclid】10.7 2D变换模块(transform2d.rs)与其它类型的转换
这段代码是 Rust 语言中为 Transform2D 类型实现的一系列方法,主要用于处理二维变换矩阵。下面我会逐步解释这些方法的作用:结构体和方法概述Transform2D<T, Src, Dst> 是一个表示二维变换的泛型结构体,其中:T 是矩阵元素的类型,需要实现 Copy traitSrc 和 Dst 是表示源和目标坐标系的类型参数。原创 2025-04-17 19:13:49 · 287 阅读 · 0 评论 -
【euclid】10.6 2D变换模块(transform2d.rs)构造函数 new、approx_eq、approx_eq_eps
Transform2D 是一个泛型结构体,有三个泛型参数:T:表示变换矩阵中元素的类型(通常是浮点数类型,如 f32 或 f64)。Src 和 Dst:表示变换的源坐标系和目标坐标系,用于类型安全地处理不同坐标系之间的转换。构造函数 newm11, m12,m21, m22,m31, m32,这是一个构造函数,用于创建一个 Transform2D 实例。m31 和 m32 是平移分量(tx 和 ty)。原创 2025-04-17 19:00:52 · 359 阅读 · 0 评论 -
【euclid】10.5 2D变换模块(transform2d.rs)Copy、Clone、Eq 和 PartialEq Hash trait
这段代码为 Transform2D 结构体实现了基本的类型 trait:Copy/Clone:允许值被复制/克隆PartialEq/Eq:允许值被比较相等性所有这些实现都依赖于类型参数 T 是否实现了相应的 trait(Copy、Clone、PartialEq 或 Eq)。Src 和 Dst 是标记类型参数,不影响这些 trait 的行为。这种模式在 Rust 中很常见,通过为泛型类型有条件地实现 trait,可以确保类型只在内部类型满足特定约束时才有某些功能。原创 2025-04-16 18:50:27 · 353 阅读 · 0 评论 -
【euclid】10.4 2D变换模块(transform2d.rs)Pod trait
这段代码为 Transform2D 类型启用了 bytemuck 的 Pod 支持,允许它在启用 bytemuck feature 时安全地进行底层字节操作,前提是其泛型参数 T 也满足 Pod,且 Src/Dst 不引入非静态生命周期。原创 2025-04-16 18:38:39 · 843 阅读 · 0 评论 -
【euclid】10.3 2D变换模块(transform2d.rs)bytemuck trait
这段代码是一个 Rust 的 unsafe trait 实现,用于标记 Transform2D 类型在特定条件下可以安全地被视为由全零字节组成的有效实例。让我们详细解释每个部分:这是一个条件编译属性,表示只有当 bytemuck feature 被启用时,下面的代码才会被编译。bytemuck 是一个 Rust crate,提供了一些 trait 和工具,用于安全地在类型和原始字节之间进行转换。原创 2025-04-15 19:06:54 · 981 阅读 · 0 评论 -
【euclid】10.2 2D变换模块(transform2d.rs)Arbitrary trait
这段代码使得 Transform2D 类型能够:在启用 arbitrary feature 时从其元素类型 T 也是 Arbitrary 的前提下随机生成一个 2D 变换矩阵用于基于属性的测试(property-based testing)这种实现特别适用于快速检查代码在不同输入下的行为是否符合预期,是 Rust 生态中常见的测试实践。原创 2025-04-15 18:05:14 · 270 阅读 · 0 评论 -
【euclid】10.1 2D变换模块(transform2d.rs)结构体定义核心解读及个人代码参照优化
/ 矩阵元素(列主序)pub m11: T, pub m12: T, // 第一列:线性变换部分pub m21: T, pub m22: T, // 第二列:线性变换部分pub m31: T, pub m32: T, // 第三列:平移分量// 类型标记(零大小类型)原创 2025-04-14 13:20:14 · 1423 阅读 · 0 评论 -
【euclid】21 3D包围盒模块(box3d.rs)
Box3D 结构体是一个高效且通用的三维轴对齐矩形框表示,提供了丰富的几何操作方法。它泛型化了坐标类型和单位,适用于图形、UI 等领域中需要处理三维矩形框的场景。原创 2025-03-24 00:14:35 · 696 阅读 · 0 评论 -
【euclid】20 2D包围盒模块(box2d.rs)
Box2D 结构体是一个高效且通用的二维轴对齐矩形表示,提供了丰富的几何操作方法。它泛型化了坐标类型和单位,适用于图形、UI 等领域中需要处理二维矩形的场景。原创 2025-03-23 23:55:21 · 331 阅读 · 0 评论 -
【euclid】19 角度操作模块(angle.rs)
这个结构体非常简单,包含一个泛型类型 T 的字段 radians,用于存储角度的弧度值。原创 2025-02-06 18:44:21 · 1076 阅读 · 0 评论 -
【euclid】18 平移变换模块(translation.rs)
定义结构体Translation2D和Translation3D分别用于二维与三维平移。原创 2025-02-06 17:44:02 · 211 阅读 · 0 评论 -
【euclid】17 形状边缘偏移量模块(side_offsets.rs)
SideOffsets2D<T, U>结构体包含四个字段:top、right、bottom、left,分别表示顶部、右侧、底部和左侧的偏移量,所有这些字段的类型都是T。此外,还有一个_unit字段,其类型为PhantomData,用于在类型层面上携带U类型的信息而不占用额外的存储空间。特性条件编译:代码中使用了#[cfg(feature = “…”)]指令来条件编译特定的特性。例如,当启用bytemuck特性时,会导入bytemuck库的Pod和Zeroable特质,这可能用于优化内存布局或序列化;原创 2025-02-04 19:53:16 · 1052 阅读 · 0 评论 -
【euclid】16 旋转操作模块(rotation.rs)
一、rotation.rs源码。原创 2025-02-04 15:34:54 · 761 阅读 · 0 评论 -
【euclid】15 刚体变换模块(rigid.rs)
rigid.rs是一个表示三维刚体变换(Rigid Transformation)的结构体定义,用于在计算机图形学、机器人学以及物理模拟等领域中表示物体在三维空间中的旋转和平移。在这个定义中,所有长度在变换后都保持不变,这是刚体变换的一个基本特性。原创 2025-02-03 23:39:51 · 1388 阅读 · 0 评论 -
【euclid】14 2D矩形模块( rect.rs)
【代码】14 2D矩形模块( rect.rs)原创 2025-02-02 23:42:29 · 305 阅读 · 0 评论 -
【euclid】13 尺寸结构模块(size.rs)
Size实现与Vector相似。原创 2025-02-02 23:37:46 · 316 阅读 · 0 评论 -
【euclid】12 向量结构模块(vector.rs)
二、说明Vector2D、Vector3D比Point2D、Point3D有更多方法,建议修改为Point2D、Point3D别名,效果更佳。原创 2025-02-02 23:15:12 · 274 阅读 · 0 评论 -
【euclid】11 3D变换模块(transform3d.rs)
transform3d.rs代码定义了一个名为 Transform3D 的 Rust 结构体,它用于表示一个3D变换矩阵。这个结构体是泛型的,包含三个类型参数:T、Src 和 Dst。其中,T 用于矩阵元素的数据类型,Src 和 Dst 用于表示变换的源和目标类型(虽然在这段代码中,Src 和 Dst 类型通过 PhantomData 引入,但并未在结构体功能上直接使用)。原创 2025-02-02 23:03:22 · 723 阅读 · 0 评论 -
【euclid】10 2D变换模块(transform2d.rs)
transform2d.rs代码定义了一个名为 Transform2D 的泛型结构体,用于表示二维变换,它使用一个压缩到3x2的列主序3x3矩阵来表示。这种变换可以用于从一个空间(源空间)到另一个空间(目标空间)的转换。这个结构体是泛型的,意味着它可以处理不同类型的数值(如f32),以及不同的源和目标空间单位。原创 2025-02-02 22:43:47 · 374 阅读 · 0 评论 -
【euclid】9 点结构模块(point.rs)
二、Point2D结构体定义代码定义了一个名为 Point2D 的泛型结构体,它表示一个二维点,并且这个结构体被标记(或说是“携带”)了一个单位(unit)。这里的单位可能是用来表示坐标的某种度量单位或者其它信息,但具体是什么并不在这个结构体定义中明确给出,而是通过泛型参数 U 提供的。2、泛型参数Point2D<T, U> 有两个泛型参数,T 和 U。T 用于表示点的坐标类型(比如 f32、f64、i32 等),而 U 用于表示与这个点相关的单位信息。这个属性指定了结构体的内存布局应该与 C 语言中原创 2025-02-02 22:01:55 · 1164 阅读 · 0 评论 -
【euclid】8 比例缩放(scale.rs)
[repr(C)])))]上面代码定义了一个使用Rust语言特性的泛型结构体Scale,这个结构体不仅使用了Rust的条件编译指令,还考虑了序列化/反序列化的能力,如果项目中启用了serde特性。#[repr( C )]:这个属性指定了结构体应该使用C语言的布局规则。这意味着结构体的内存布局将与C语言中的等效结构相匹配,这对于与C语言代码交互或与需要特定内存布局的系统API交互非常有用。原创 2025-02-01 21:18:10 · 1695 阅读 · 0 评论 -
【euclid】7 与mint库对象互转宏(macros.rs)
mint_vec { … }定义了一个名为mint_vec的宏。这个宏允许开发者通过简单地指定自定义向量类型的名称、字段和对应的mint库类型,来自动生成与mint库中向量类型的相互转换实现,从而减少了重复代码并提高了代码的可维护性。原创 2025-02-01 11:50:37 · 911 阅读 · 0 评论 -
【euclid】6 齐次坐标模块(homogen.rs)
[repr(C)]pub x: T,pub y: T,pub z: T,pub w: T,#[repr©] 属性确保了结构体在内存中的布局是连续的,这对于与C语言接口或者特定的内存对齐需求很有用。T 是向量的坐标类型,它可以是任何数值类型,比如 f32 或 f64。U 是一个类型参数,通过 PhantomData 被引入,通常用于表示一些与结构体相关的额外信息,比如单位或维度,但不占用实际的内存空间。_unit 字段被标记为文档隐藏,意味着在生成的文档中不会显示这个字段。原创 2025-01-31 23:53:24 · 648 阅读 · 0 评论 -
【euclid】5 长度和距离计算模块(length.rs)
[repr(C)]#[repr©]:保证结构体在内存中的布局与C语言兼容,通常用于确保与C/C++代码或外部接口的二进制兼容性。PhantomData:一个零大小的类型,用于在编译时携带类型信息,而不会增加结构体的大小。这里用于确保单位的一致性。原创 2025-01-31 21:40:32 · 757 阅读 · 0 评论 -
【euclid】4 有序近似比较模块(approxord.rs)
approxord.rs代码定义了两个用于获取两个值中最小值和最大值的泛型函数,min 和 max,这些函数特别适用于处理部分可排序的类型(PartialOrd),这对于浮点数类型尤为重要,因为浮点数中包括 NaN(Not a Number,非数字),而 NaN 是无法参与常规排序的。原创 2025-01-31 10:18:44 · 303 阅读 · 0 评论 -
【euclid】3 数值处理模块(num.rs)
这段代码展示了如何在Rust中使用宏来减少代码重复,同时为整数和浮点数类型实现了一些基本的数学运算接口。通过避免使用 num_traits 的某些特质,代码保持了简洁性和清晰性。原创 2025-01-31 00:48:50 · 529 阅读 · 0 评论 -
【euclid】2 相似比较(approxeq.rs)
相似比较。原创 2024-12-17 20:26:58 · 272 阅读 · 0 评论 -
【euclid】1 三角函数接口(trig.rs)
三角函数接口原创 2024-12-16 20:16:20 · 373 阅读 · 0 评论 -
【euclid】0 Euclid库中各模块功能解读(lib.rs)
euclid是一个用于建立2D和3D几何图形的简单API,它可以让您轻松地创建、操作和比较几何形状和向量。原创 2024-12-15 21:10:57 · 311 阅读 · 0 评论