GGB数学云 SwiftGraphics绘图基础:点和矢量

SwiftGraphics绘图基础:点和矢量

2015年4月6日 人阅读 Graphics»Swift

摘要: 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后的点。
分享到: 更多