Je généralisé le ci-dessous afin que d'autres valeurs que a=10
peuvent ...
a = 10; % constant line offset
th = 0; % constant angle of line
% rl = ?? - variable to find
% Coordinates of line:
% [xl, yl] = [ a + rl * cos(th), a + rl * sin(th) ];
rc = 1; % constant radius of circle
% alpha = ?? - variable to find
% Coordinates of circle:
% [xc, yc] = [ rc * cos(alpha), rc * sin(alpha) ];
Nous voulons que l'intersection, donc xl = xc
, yl = yc
% a + rl * cos(th) = rc * cos(alpha)
% a + rl * sin(th) = rc * sin(alpha)
place des deux côtés des deux équations et les somme. Simplification sin(a)^2 + cos(a)^2 = 1
. L'expansion supports et de simplifier donne plus
% rl^2 + 2 * a * rl * (cos(th) + sin(th)) + 2 * a - rc^2 = 0
Maintenant, vous pouvez utiliser la formule quadratique pour obtenir la valeur de rl
.
discriminante Test:
dsc = (2 * a * (cos(th) + sin(th)))^2 - 4 * (2 * a - rc^2);
rl = [];
if dsc < 0
% no intersection
elseif dsc == 0
% one intersection at
rl = - cos(th) - sin(th);
else
% two intersection points
rl = -cos(th) - sin(th) + [ sqrt(dsc)/2, -sqrt(dsc)/2];
end
% Get alpha from an earlier equation
alpha = acos((a + rl .* cos(th)) ./ rc);
Maintenant vous avez 0, 1 ou 2 points d'intersection de la ligne avec le cercle, de certaines valeurs connues et inconnues sur chaque ligne. Essentiellement ce ne sont que des équations simultanées, voir le début de cet article pour une base de maths https://en.wikipedia.org/wiki/System_of_linear_equations
me tabassaient les mathématiques! – Wolfie