Shoelace formula for polygonal area: Difference between revisions
Content added Content deleted
(Add Swift) |
|||
Line 1,199: | Line 1,199: | ||
30 |
30 |
||
</pre> |
</pre> |
||
=={{header|Swift}}== |
|||
{{trans|Scala}} |
|||
<lang swift>import Foundation |
|||
struct Point { |
|||
var x: Double |
|||
var y: Double |
|||
} |
|||
extension Point: CustomStringConvertible { |
|||
var description: String { |
|||
return "Point(x: \(x), y: \(y))" |
|||
} |
|||
} |
|||
struct Polygon { |
|||
var points: [Point] |
|||
var area: Double { |
|||
let xx = points.map({ $0.x }) |
|||
let yy = points.map({ $0.y }) |
|||
let overlace = zip(xx, yy.dropFirst() + yy.prefix(1)).map({ $0.0 * $0.1 }).reduce(0, +) |
|||
let underlace = zip(yy, xx.dropFirst() + xx.prefix(1)).map({ $0.0 * $0.1 }).reduce(0, +) |
|||
return abs(overlace - underlace) / 2 |
|||
} |
|||
init(points: [Point]) { |
|||
self.points = points |
|||
} |
|||
init(points: [(Double, Double)]) { |
|||
self.init(points: points.map({ Point(x: $0.0, y: $0.1) })) |
|||
} |
|||
} |
|||
let poly = Polygon(points: [ |
|||
(3,4), |
|||
(5,11), |
|||
(12,8), |
|||
(9,5), |
|||
(5,6) |
|||
]) |
|||
print("\(poly) area = \(poly.area)")</lang> |
|||
{{out}} |
|||
<pre>Polygon(points: [Point(x: 3.0, y: 4.0), Point(x: 5.0, y: 11.0), Point(x: 12.0, y: 8.0), Point(x: 9.0, y: 5.0), Point(x: 5.0, y: 6.0)]) area = 30.0</pre> |
|||
=={{header|TI-83 BASIC}}== |
=={{header|TI-83 BASIC}}== |