# 18.Silver Challenge

In Line.swift:

``````struct Line {
var begin = CGPoint.zero
var end = CGPoint.zero

var angle: Measurement<UnitAngle> {

}
}
``````

In DrawView.swift:

``````override func draw(_ rect: CGRect) {
finishedLineColor.setStroke()
for line in finishedLines {
stroke(line)
}

// currentLineColor
for (_, line) in currentLines {

switch line.angle.value {
case 0 ..< 90.0:
UIColor.red.setStroke()
case 90.0 ..< 180.0:
UIColor.blue.setStroke()
case -180.0 ..< -90.0:
UIColor.yellow.setStroke()
case -90.0 ..< 0:
UIColor.green.setStroke()
default:
break
}

stroke(line)
}
}``````

@Alex_Oliveira
A very nice use of the new Measurement class.

An alternative approach for getting a more broad spectrum of colours would be doing the followingâ€¦

In DrawView.swift:

``````func color(startPoint from: CGPoint, endPoint end: CGPoint) -> UIColor {
// Get the magnitude of rise and run
let dx = end.x - from.x
let dy = end.y - from.y

// Get the angle in radians
// Note: this function returns a range between 0 to Pi or 0 to -Pi
var angle = -atan2(Double(dy), Double(dx))

// Compensate for the 0 to -Pi range that's given by the atan2 function to
// have a range that goes from 0 to 2 x Pi
angle = (angle > 0) ? angle : (2 * M_PI) + angle
// Convet the angle in degress to a fraction that will range between 0 to 1
let percentAngle = angle / (2 * M_PI)

// Create a color using the HSB scale as the hue is the component that controls the color range
return UIColor(hue: CGFloat(percentAngle), saturation: 1, brightness: 1, alpha: 1)
}

override func draw(_ rect: CGRect) {

finishedLineColor.setStroke()
for line in finishedLines {
stroke(line)
}

for (_, line) in currentLines {
currentLineColor = color(startPoint: line.begin, endPoint: line.end)
currentLineColor.setStroke()

stroke(line)
}
}``````

Ternary operator. Neat!
Thank you for reminding me of this tool.