摘要: SwiftGraphics使用说明(点和矢量部分)。
SwiftGraphics 是一款用Swift开发的矢量图形开源框架,集成了Quartz的强大图形功能和Swift的便利性。其作者 Jonathan Wight 曾开发过Twitter,专注于 Mac OS X 软件开发。本文介绍其核心结构之一:CGPoint。
在 SwiftGraphics 中,“点”和“矢量”都用CGPoint表示。
1. 构造函数
CGPoint(x: CGFloat, y: CGFloat)
CGPoint(x: Double, y: Double)
CGPoint(x: Int, y: Int)
CGPoint(x: CGFloat)
构造X轴上的点。CGPoint(y: CGFloat)
构造Y轴上的点。CGPoint( (CGFloat, CGFloat) )
从元组构造,可省去“x:”了。CGPoint(size: CGSize)
CGSize转换为CGPoint。CGPoint(magnitude:CGFloat, direction:CGFloat)
:极坐标构造法。CGPoint.zeroPoint
:原点、零矢量。
2. 矢量运算
相关知识可参考 二维代数几何原理、《Curves and Surfaces for CAGD》、《CAGD》。
点 + 点
,点 - 点
,点 += 点
,点 -= 点
,+点
,-点
:累加,结果为点。数 * 点
、点 * 数
、点 / 数
、点 *= 数
、点 /= 数
:数乘,结果为点,这里“数”指CGFloat。点 * 大小
、点 / 大小
、点 *= 大小
、点 /= 大小
:XY分别数乘,这里“大小”指CGSize。dotProduct(点, 点)
、dotProduct(点, 点)
:点积和叉积,其常见应用见 二维代数几何原理。
3. 常用的属性和函数
isZero
:返回是否为原点、零矢量。magnitude
:可读写属性,返回矢量长度、点到原点的距离。direction
:可读写属性,返回矢量角度、点到原点的倾角,值域[-PI, PI)。normalized
:返回单位矢量。orthogonal
:返回正交矢量,即本矢量沿逆时针方向旋转90度后的矢量。transposed
:返回转置矢量,即本矢量沿顺时针方向旋转90度后的矢量、X和Y对调后的矢量。clampedTo(CGRect)
:返回本点限制在指定的矩形范围内后的点,越界则取边界坐标。round(CGPoint)
:坐标取整,可用于图形显示对齐。round(CGPoint, decimal:Int)
:坐标四舍五入到指定的小数位。
4. 点间关系
distanceTo(点)
:返回两点间的距离。distanceTo(点A,点B)
:返回本点到无穷直线AB的距离。distanceToBeeline(点A,点B) -> (CGFloat, CGPoint)
:返回本点到直线AB的距离及最近点。collinear(点1,点2,点3)
:返回三点是否共线。collinear(点1,点2,点3,容差)
:返回在指定容差值下三点是否共线。angle(点A,点B,点C)
:返回∠BAC,正弧度值。
5. 矢量间关系
angleTo(vec:CGPoint)
:返回矢量夹角,正值表示逆时针旋转到另一矢量,负值表示顺时针旋转。isPerpendicularTo(vec:CGPoint)
:返回本矢量是否与另一矢量垂直。distanceToVector(xAxis:CGPoint)
:返回本矢量投影到矢量xAxis上时的垂直投影距离。projectScaleToVector(xAxis:CGPoint)
:返回本矢量投影到矢量xAxis上的投影比例。projectResolveVector(xAxis:CGPoint) -> (CGPoint, CGPoint)
:返回投影矢量和垂直矢量。resolveVector(uAxis:CGPoint, vAxis:CGPoint) -> (CGFloat, CGFloat)
:矢量分解。
6. 移动直尺法(相对坐标计算)
polarPoint(angle:CGFloat, radius:CGFloat)
:极坐标法,从本点沿某方向前进一段距离的点。rulerPoint(导向点, dx:CGFloat)
:返回沿导向点前进dx后的点。rulerPoint(导向点, dx, dy)
:返回沿导向点前进dx、垂直方向前进dy后的点。