CGMath
关于
CGMath是围绕CGGeometry类型(CGPoint
、CGSize
、CGRect
和CGVector
)的一系列扩展和函数。它还包含一些针对FloatingPoint
和Comparable
类型的其他函数。
Comparable
clamp
是一个接受三个参数(value
、min
和max
)的函数。如果value <= min
,则它将返回min
,如果value >= max
则返回max
,在其他情况下返回value
。
浮点数
lerp
是线性插值函数。给定两个值,start
和end
,以及一个progress
(通常在[0, 1]
范围内),它将在start
和end
之间执行线性插值并返回该值。
您可以在以下链接了解更多关于线性插值的信息:这里。但其基本原理是,当 progress
为 0
时返回 start
,当 progress
为 1
时返回 end
,在 [0, 1]
区间内返回 end
与 start
之差的百分比。例如,lerp(start: 5, end: 15, progress: 0.5)
将返回 10
,这正好位于 5
和 15
之间,因为 progress
为 0.5
。
此方法可以取 progress
值超出 [0, 1]
范围,在某些情况下可能很有用,如制作具有弹性的动画,但您可以在调用函数之前使用 clamp()
来防止这种情况。
inverseLerp
是 lerp
的反方法。给定三个值,start
、end
和一个value
(通常在[start, end]
范围内),它将返回一个 progress
值,以便在使用相同的start
和end
值进行lerp
时返回这个value
。例如,lerp(start: 5, end: 15, value: 10)
将返回 0.5
,因为 10
正好在 5
和 15
之间。
remap
将一个范围的值转换为另一个范围。例如,如果您有两个值在 [20, 40]
范围内,您想将它们转换为 [50, 100]
,您将调用 value.remap(from: (20, 40), to: (50, 100))
。20
将变为 50
,40
将变为 100
,而 30
将变为 75
。
CGGeometry 和 DoubleListRepresentable
四个 CGGeometry
类型 CGPoint
、CGSize
、CGRect
和 CGVector
符合 DoubleListRepresentable
协议。这意味着它们可以初始化并转换为双精度浮点型列表。在 CGRect
的例子中,此列表恰好有四个元素,在其他情况下,列表应恰好有四个元素。
DoubleListRepresentable
添加了 magnitude
变量以及 normalize
和 lerp
方法,这些方法应该很容易理解。它还添加了四个基本算术函数:+
、-
、*
和 /
。在乘法和除法的情况下,使用标量(Double
)乘以或除以每个元素的每个分量。
CGGeometry 扩展
除了提供由 DoubleListRepresentable
函数和变量外,四种 CGGeometry
类型至少包含一个便利初始化器,这应该很容易理解,而且 CGPoint
、CGSize
和 CGVector
中含有将值从一种类型转换为其他两种类型的变量。
示例
要运行示例项目,首先克隆仓库,然后在 Example 目录中运行 pod install
。
安装
CGMath 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行:
pod 'CGMath'
作者
Emilio Peláez,[email protected]
许可
CGMath 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。