摘要: 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后的点。