Centre and radius of a circle passing through 3 points in a plane: Difference between revisions

(Spaced the header from the samples)
imported>Regattaguru
Line 533:
 
You may [https://ato.pxeger.com/run?1=jZO9TsMwFIUHtjzFHRhs4ZrGLrSAypOwhBCkih8JJxkqxJJHACkMCFQhEHPrdutU3oKtfQIeATv1T6UqKJ6ur3x8vntkv3yI6CofjT7z7LLV-9khaX4O8UDE1wkCdPb7-iiXs3cCupqqChPTXY3npqsq3y1K2y1KDBjuA1DrOE5us0SgaqPXzRB21am3VfEEfUDI-CwmsAfGaTHB8P0MyFwGLbBm6gwyCE5Q1V6g9FagOaygKL1A1xsO47kR6CEx7DtUvyxlPZahqscwFPW2wMhWSMvZV4OQpKORzUKSjk42C0k6Wvl_SNONkLax7Ny1GDbaWltglTFeRyWii0GeQv9UReQelT9fDYNckD5tNRlN70QWPARBGg3NqwfEGO1xwmi7q5912KH8iPA2ZR295ZweHpCwS3mIT9afxvwd-4f-AA Attempt This Online!]
==={{header|Swift}}===
<syntaxhighlight lang="swift">
import Foundation
import Matrix
 
extension Matrix where Element: SignedNumeric {
func minor(row: Int, column: Int) -> Element {
var submatrix = self
_ = submatrix.remove(rowAt: row - 1)
_ = submatrix.remove(columnAt: column - 1)
return submatrix.determinant as Element
}
}
 
enum MatrixErrors: Error {
case notEnoughPoints, tooManyPoints, pointsOnALine, miscError
}
 
func circleFrom3Points(points: (Double,Double)... ) throws -> (Double,Double,Double){
var pointArray: [[Double]] = [[0,0,0,0]]
for p in points {
pointArray.append([pow(p.0, 2) + pow(p.1, 2), p.0, p.1, 1])
}
guard pointArray.count > 3 else { throw MatrixErrors.notEnoughPoints }
guard pointArray.count < 5 else { throw MatrixErrors.tooManyPoints }
var matrix = Matrix(elements:pointArray)
var m11 = matrix.minor(row: 1, column: 1)
guard m11 != 0 else { throw MatrixErrors.pointsOnALine }
var m12 = matrix.minor(row: 1, column: 2)
var m13 = matrix.minor(row: 1, column: 3)
 
let x = 0.5 * m12 / m11
let y = -0.5 * m13 / m11
let r = (pow(x - pointArray[1][1],2) + pow(y - pointArray[1][2],2)).squareRoot()
return (x,y,r)
}
 
do {
let (x,y,r) = try circleFrom3Points(points: (22.83,2.07), (14.39,30.24), (33.65,17.31))
print("x:\(x), y:\(y), r: \(r)")
} catch {
debugPrint(error)
exit(1)
}
</syntaxhighlight>
<pre>
x:18.978515660148812, y:16.265410797715873, r: 14.708623978334185
</pre>
 
=={{header|Wren}}==
Anonymous user