用MATLAB编写的程序,用于已知圆的圆心和半径以及圆外一点,求出该点到圆的切点,并绘制出圆、切线以及相关点的图形:
% 判断点是否真的在圆外
if distance <= radius
error('给定的点不在圆外,请重新输入圆外的点。');
end
% 计算从圆心指向圆外点的向量与x轴正方向的夹角
angle_to_point = atan2(point_y - center_y, point_x - center_x);
% 计算圆心到圆外点的连线与圆半径在切点处形成的夹角
angle_between = acos(radius / distance);
% 计算两个切点的坐标
tangent_point_1_x = center_x + radius * cos(angle_to_point + angle_between);
tangent_point_1_y = center_y + radius * sin(angle_to_point + angle_between);
tangent_point_2_x = center_x + radius * cos(angle_to_point - angle_between);
tangent_point_2_y = center_y + radius * sin(angle_to_point - angle_between);
% 输出切点坐标
fprintf('第一个切点坐标为: (%.4f, %.4f)\n', tangent_point_1_x, tangent_point_1_y);
fprintf('第二个切点坐标为: (%.4f, %.4f)\n', tangent_point_2_x, tangent_point_2_y);
% 绘制图形
theta = 0:0.01:2*pi;
x_circle = center_x + radius * cos(theta);
y_circle = center_y + radius * sin(theta);
plot(x_circle, y_circle, 'b', 'LineWidth', 2);
hold on;
plot(point_x, point_y, 'ro', 'MarkerSize', 8);
plot([point_x, tangent_point_1_x], [point_y, tangent_point_1_y], 'g', 'LineWidth', 1);
plot([point_x, tangent_point_2_x], [point_y, tangent_point_2_y], 'g', 'LineWidth', 1);
plot(tangent_point_1_x, tangent_point_1_y, 'kx', 'MarkerSize', 8);
plot(tangent_point_2_x, tangent_point_2_y, 'kx', 'MarkerSize', 8);
axis equal;
title('圆、圆外点及切线');
hold off;
fprintf('第一个切点坐标为: (%.4f, %.4f)\n', tangent_point_1_x, tangent_point_1_y);
fprintf('第二个切点坐标为: (%.4f, %.4f)\n', tangent_point_2_x, tangent_point_2_y);
在这个程序中:
1. 首先定义了圆的圆心坐标、半径以及圆外一点的坐标。
2. 接着计算圆心到圆外点的距离,以确认该点在圆外,若不在则报错。
3. 然后通过三角函数关系计算出从圆心指向圆外点的向量与x轴正方向的夹角,以及圆心到圆外点的连线与圆半径在切点处形成的夹角。
4. 利用这些夹角计算出两个切点的坐标。
5. 最后绘制出圆、圆外点、切点以及切线的图形,并且设置图形的坐标轴为等比例显示,以便更直观地观察图形。