Qual é a melhor maneira de estimar a medida das coisas fotografadas?

Meu aplicativo deve estimar o comprimento (em milímetros) de um objeto usando moedas de euro como referência. Este é um exemplo de captura de tela:

Para obter o diâmetro da moeda fotografada, primeiro calculo a equação de um círculo que passa por esses 3 pontos da forma

x^2 + y^2 + ax + by + c = 0

e então eu tenho o diâmetro por

2 * square_root((a/2)^2 + (b/2)^2 -c).

Finalmente, posso executar a seguinte proporção para obter o comprimento da caneta vermelha:

/* length_estimated_pen (mm) : distance_green_pins (points) = real_diameter_coin (mm) : diameter_on_screen (points) */

let distanceGreen:Double = Double(sqrt(pow(self.greenLocationA.center.x - self.greenLocationB.center.x, 2.0) + pow(self.greenLocationA.center.y - self.greenLocationB.center.y, 2.0)))

let estimatedMeasure:Double = (distanceGreen * Double(ChosenMeter.moneyDiameter)) / diameter

onde emChosenMeter.moneyDiameter é armazenado o diâmetro real da moeda escolhida como referência (clicando em um dos 3 botões abaixo).

Eu preciso trabalhar comDouble ao invés deCGFloat Porqueesta O tutorial para resolver um sistema de equações lineares (para obter o coeficiente a, b, c da equação circular) funciona com Double.

O problema é o comprimento estimado da caneta vermelha é sempre superestimado em mais de 10 mm. Acho que devo aplicar um fator de correção ou complicar o cálculo levando em consideração outros fatores, mas quais? Você pode me dar algumas dicas? Qualquer ajuda seria útil para mim.

questionAnswers(1)

yourAnswerToTheQuestion