思路:练习要求根据线条不同角度有不同的颜色,所以先得算角度,我这里理解的是线条和水平线的夹角,就是上图的角A。begin是起点,就是手指按下的线,end是手指抬起的点或者当前手指移动到的点。
这个改变颜色吧,根据线条的一个角度怎么设置颜色,如果是用rgb的话,起码应该有三个值,目前没想明白怎么弄,先打算给一个颜色,根据线条角度不同,改变它的透明度,虽然这样和练习要求不符,暂时先这样,改变颜色的话还得再想想
一. 计算线条的角度
1. 计算公式:
参考: https://zhidao.baidu.com/question/578887213.html
余弦定理:(b^2 :b的平方)
cosA=(b^2+c^2-a^2)/2bc
cosB=(a^2+c^2-b^2)/2ac
cosC=(a^2+b^2-c^2)/2ab
2. 代码求角度
iOS里面默认有个求反余弦的方法acos(_:),但是求出的是弧度,想知道角度,还得换算一下:
参考: https://zhidao.baidu.com/question/333147926359415005.html
//swift3代码如下:
import Foundation
var begin = CGPoint.zero
var end = CGPoint.zero
//起点
begin = CGPoint.init(x: 5, y: 6)
//终点
end = CGPoint.init(x: 9, y: 9)
//三边长
let b = end.x - begin.x
let a = end.y - begin.y
let c = sqrt(b*b+a*a)
print("三边长: \(a)|\(b)|\(c)")
let cosA = (b*b + c*c - a*a)/(2*b*c)
//弧度
let radian = acos(cosA)
//角度
let angle = radian / 3.14 * 180
let cosB = (a*a + c*c - b*b)/(2*a*c)
let angleB = acos(cosB)/3.14 * 180
print("a angle is \(angle)")
print("b angle is \(angleB)")
二. 根据线条的角度,改变透明度
1.根据颜色算出透明度,比如用 角度/360,算个百分比,然后作为某个颜色的透明度
//让current lines 线条 在不同的角度 有不同的颜色
//给一个蓝色, 用角度除以360 ,用百分数 控制颜色透明度
func calculateColor(begin:CGPoint,end:CGPoint)->UIColor{
//三边长
let b = end.x - begin.x
let a = end.y - begin.y
let c = sqrt(b*b+a*a)
let cosA = (b*b + c*c - a*a)/(2*b*c)
//弧度
let radian = acos(cosA)
//角度
let angle = radian / 3.14 * 180
let alpha = angle/360
print("透明度 \(alpha)")
return UIColor.blue.withAlphaComponent(alpha)
}