CGMath

Social Banner

License

一个围绕 CGGeometry 类型(CGPointCGSizeCGRectCGVector)的扩展和函数集合。它还包括一些用于 FloatingPointComparable 类型的函数。

Comparable(可比较的)

clamp 是一个接受三个参数的函数:value(值)、min(最小值)和 max(最大值)。如果 value <= min,它将返回 min;如果 value >= max,它将返回 max;在任何其他情况下,它将返回 value

Floating Point(浮点数)

lerp 是线性插值函数。给定两个值 start(开始)和 end(结束),以及一个 progress(进度,通常在 [0, 1] 范围内),它将执行 startend 之间的线性插值,并返回该值。

您可以在 此处阅读更多关于线性插值的信息,但它的基本要点是,当 progress0 时,它将返回 start;当 progress 为 1 时,它将返回 end;对于 [0, 1] 中的任何值,它将返回 endstart 之间差异的百分比。 例如,lerp(start: 5, end: 15, progress: 0.5) 将返回 10,正好在 515 之间,因为 progress 为 0.5

此方法可以采用 [0, 1] 范围之外的 progress 值,这在某些情况下可能很有用,例如在制作弹性动画时,但是您可以通过在调用该函数之前对进度使用 clamp() 来防止这种情况。

inverseLerplerp 相反。 给定三个值:start(开始)、end(结束)和一个 value(值,通常在 [start, end] 范围内),它将返回一个 progress(进度)值,这样在 lerp 中使用它与相同的 startend 值时,它将返回 value。 例如,lerp(start: 5, end: 15, value: 10) 将返回 0.5,因为 10 正好在 515 之间。

remap 接受两个范围,并将该值从一个范围转换为另一个范围。 例如,如果您在 [20, 40] 范围内有一些值,并且您希望它们在 [50, 100] 范围内,您将调用 value.remap(from: (20, 40), to: (50, 100))20 将变为 5040 将变为 10030 将变为 75

CGGeometry 和 DoubleListRepresentable

四种 CGGeometry 类型:CGPointCGSizeCGRectCGVector 符合 DoubleListRepresentable 协议。 这意味着它们可以被初始化并转换为双精度列表。 对于 CGRect,此列表恰好为四个元素长;在所有其他情况下,该列表应恰好有两个元素。

DoubleListRepresentable 添加了 magnitude 变量以及 normalizelerp 方法,这些方法应该是不言自明的。 它还添加了四个基本算术函数:+-*/。 对于乘法和除法,这是通过标量 (Double) 完成的,该标量乘以或除以元素的每个组件。

CGGeometry 扩展

除了 DoubleListRepresentable 提供的函数和变量之外,四种 CGGeometry 类型中的每一种都包含至少一个方便的初始化器,这应该很容易理解,并且 CGPointCGSizeCGVector 包含将值从一种类型转换为其他两种类型中的任何一种类型的变量。