ios开发练习:让currentLines中的线条在不同的角度有不同的颜色

这里写图片描述
思路:练习要求根据线条不同角度有不同的颜色,所以先得算角度,我这里理解的是线条和水平线的夹角,就是上图的角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)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值