Sabendo que a equação do círculo vista no vídeo acima é:
(x - centerX)^2 + (y-centerY)^2 = radius^2
Se o ponto x,y estiver dentro do círculo, o valor do lado esquerdo da equação será menor que o radius^2.
Se estiver na borda, será igual.
E se estiver fora do círculo, será maior.
Essas observações são decorrentes da forma como se chega na fórmula do círculo, usando pitágoras. Substitua você mesmo para pegar a intuição.
int insideCircle(point p, point center, double radius){ double dx = p.x - center.x; double dy = p.y - center.y; double left = dx*dx + dy*dy; double right = radius * radius; if (D_EQUAL(left, right)) { return 1; // na borda; } else if ( left < right ) { return 0; // dentro do círculo } else { return 2; // fora }}Arco de um círculo:
/*Comprimento do circunferência*/double circleLength(double radius){ return 2.0*M_PI*radius;}/*Retorna o comprimento do arco do circulo com o centro dado e angulo informado.O ângulo é dado em radianos.O maior ângulo possível é 360 (2PI). Se sabemos a circunferência do círculo e sabemosque ele é obtida considerando o circulo inteiro, então basta fazer uma regra de 3:2PI = ctheta = ?*/double arcLength(double circleLength, double theta){ return (circleLength* theta) / 2*M_PI;}A ideia aqui é encontrar o tamanho da linha vermelha da figura abaixo.
Para isso, utilizaremos a lei dos cossenos, que nos dá uma relação entre lados do triângulo independentemente de serem retângulos ou não (ao contrário de pitágoras). Veja aqui a demonstração dessa lei: https://pt.wikipedia.org/wiki/Lei_dos_cossenos
Para simplificar, vamos chamar chord de 'c':
c² = r² + r² - 2*r * r * cos(theta)
c² = 2r² - 2r²cos(theta)
colocando 2r² em evidência:
c² = 2r² ( 1 - cos(theta) )
c = raiz_quadrada ( 2r² ( 1 - cos(theta) ) )
E o código:
double chordLength(double radius, double theta){ return sqrt(2*radius*radius * (1-cos(theta)));}Veja a figura abaixo para entender o código.