文章目录
三角形的四心
外心
外心的定义及性质
- 定义:外接圆圆心
- 性质:
- 三边中垂线交点
- 外心到三顶点的距离相等
外心的计算实例(matlab)
% 三角形的顶点坐标
A = [1, 1];
B = [4, 5];
C = [7, 2];
% 计算AB、AC的中点坐标
M_AB = (A + B) / 2;
M_AC = (A + C) / 2;
% 计算AB、AC的斜率
k_AB = (B(2) - A(2)) / (B(1) - A(1));
k_AC = (C(2) - A(2)) / (C(1) - A(1));
% 计算AB、AC的垂直平分线的斜率
k_perp_AB = -1 / k_AB;
k_perp_AC = -1 / k_AC;
% 计算AB、AC的垂直平分线的方程
b_perp_AB = M_AB(2) - k_perp_AB * M_AB(1);
b_perp_AC = M_AC(2) - k_perp_AC * M_AC(1);
% 计算垂直平分线的交点坐标
x = (b_perp_AC - b_perp_AB) / (k_perp_AB - k_perp_AC);
y = k_perp_AB * x + b_perp_AB;
% 输出外心的坐标
O = [x, y];
disp(O);
% 计算外接圆的半径和圆心
R = norm(A - O);
center = O;
% 绘制三角形、外心和外接圆
figure;
hold on;
plot([A(1), B(1)], [A(2), B(2)], 'k');
plot([B(1), C(1)], [B(2), C(2)], 'k');
plot([C(1), A(1)], [C(2), A(2)], 'k');
plot(A(1), A(2), 'r*');
plot(B(1), B(2), 'r*');
plot(C(1), C(2), 'r*');
plot(O(1), O(2), 'g*');
text(A(1)-0.4, A(2), 'A', 'VerticalAlignment', 'bottom');
text(B(1), B(2)+0.1, 'B', 'VerticalAlignment', 'bottom');
text(C(1)+0.1, C(2), 'C', 'VerticalAlignment', 'bottom');
text(O(1), O(2), 'O', 'VerticalAlignment', 'bottom');
viscircles(center, R, 'Color', 'b','LineStyle','-','LineWidth',0.5);
axis equal;
输出效果如下
内心
内心的定义及性质
- 定义:内接圆圆心
- 性质:
- 三条角平分线交点
- 内心到三边的距离相等
内心的计算实例(matlab)
% 三角形的顶点坐标
A = [1, 1];
B = [4, 5];
C = [7, 2];
% 计算AB、AC、BC的边长
AB = norm(B - A);
AC = norm(C - A);
BC = norm(C - B);
% 计算内心的坐标
x = (AB * A(1) + AC * B(1) + BC * C(1)) / (AB + AC + BC);
y = (AB * A(2) + AC * B(2) + BC * C(2)) / (AB + AC + BC);
I = [x, y];
disp(I);
% 计算内接圆的半径
s = (AB + AC + BC) / 2;
area = sqrt(s * (s - AB) * (s - AC) * (s - BC));
r = area / s;
% 计算内接圆的圆心
center = [(BC * A(1) + AC * B(1) + AB * C(1)) / (AB + AC + BC), (BC * A(2) + AC * B(2) + AB * C(2)) / (AB + AC + BC)];
% 绘制三角形、内心和内接圆
figure;
hold on;
plot([A(1), B(1)], [A(2), B(2)], 'k');
plot([B(1), C(1)], [B(2), C(2)], 'k');
plot([C(1), A(1)], [C(2), A(2)], 'k');
plot(A(1), A(2), 'r*');
plot(B(1), B(2), 'r*');
plot(C(1), C(2), 'r*');
plot(I(1), I(2), 'g*');
text(A(1)-0.4, A(2), 'A', 'VerticalAlignment', 'bottom');
text(B(1), B(2), 'B', 'VerticalAlignment', 'bottom');
text(C(1), C(2)+0.1, 'C', 'VerticalAlignment', 'bottom');
text(I(1), I(2), 'I', 'VerticalAlignment', 'bottom');
viscircles(center, r, 'Color', 'b','LineStyle','-','LineWidth',0.5);
axis equal;
xlim padded
输出效果如下
垂心
垂心的定义及性质
- 定义:三条高的交点
垂心的计算实例(matlab)
% 三角形的顶点坐标
A = [1, 1];
B = [4, 5];
C = [7, 2];
% 计算AB、AC、BC的边长
AB = norm(B - A);
AC = norm(C - A);
BC = norm(C - B);
% 计算垂心的坐标
x = (AB * A(1) + AC * B(1) + BC * C(1)) / (AB + AC + BC);
y = (AB * A(2) + AC * B(2) + BC * C(2)) / (AB + AC + BC);
H = [x, y];
% 计算三条垂线的方程
% AB边的垂线
m1 = -1 / ((B(2) - A(2)) / (B(1) - A(1)));
c1 = H(2) - m1 * H(1);
% BC边的垂线
m2 = -1 / ((B(2) - C(2)) / (B(1) - C(1)));
c2 = H(2) - m2 * H(1);
% AC边的垂线
m3 = -1 / ((A(2) - C(2)) / (A(1) - C(1)));
c3 = H(2) - m3 * H(1);
% 绘制三角形、垂心和三条垂线
figure;
hold on;
plot([A(1), B(1)], [A(2), B(2)], 'k');
plot([B(1), C(1)], [B(2), C(2)], 'k');
plot([C(1), A(1)], [C(2), A(2)], 'k');
plot(A(1), A(2), 'r*');
plot(B(1), B(2), 'r*');
plot(C(1), C(2), 'r*');
plot(H(1), H(2), 'g*');
fplot(@(x) m1*x+c1, [min([A(1), B(1), C(1)]), max([A(1), B(1), C(1)])], 'b');
fplot(@(x) m2*x+c2, [min([A(1), B(1), C(1)]), max([A(1), B(1), C(1)])], 'b');
fplot(@(x) m3*x+c3, [3.4, 4.2], 'b');
text(A(1), A(2), 'A', 'VerticalAlignment', 'bottom');
text(B(1), B(2), 'B', 'VerticalAlignment', 'bottom');
text(C(1), C(2), 'C', 'VerticalAlignment', 'bottom');
text(H(1)+0.3, H(2)-0.1, 'H', 'VerticalAlignment', 'bottom');
axis equal;
输出效果如下
重心
重心的定义及性质
- 定义:三条中线的交点
- 性质:
- 它是到三角形三顶点距离的平方和最小的点
- 它是三角形内部到三边距离之积最大的点
重心的计算实例(matlab)
% 三角形的顶点坐标
A = [1, 1];
B = [4, 5];
C = [7, 2];
% 计算重心的坐标
G = (A + B + C) / 3;
% 计算三条中线的端点坐标
D = (B + C) / 2;
E = (A + C) / 2;
F = (A + B) / 2;
% 绘制三角形、重心、三条中线和交汇点
figure;
hold on;
plot([A(1), B(1)], [A(2), B(2)], 'k');
plot([B(1), C(1)], [B(2), C(2)], 'k');
plot([C(1), A(1)], [C(2), A(2)], 'k');
plot(A(1), A(2), 'r*');
plot(B(1), B(2), 'r*');
plot(C(1), C(2), 'r*');
plot(G(1), G(2), 'g*');
plot([A(1), D(1)], [A(2), D(2)], 'b--');
plot([B(1), E(1)], [B(2), E(2)], 'b--');
plot([C(1), F(1)], [C(2), F(2)], 'b--');
text(A(1)-0.1, A(2)+0.2, 'A', 'VerticalAlignment', 'bottom');
text(B(1), B(2)+0.1, 'B', 'VerticalAlignment', 'bottom');
text(C(1)+0.1, C(2), 'C', 'VerticalAlignment', 'bottom');
text(G(1)+0.1, G(2)+0.1, 'G', 'VerticalAlignment', 'bottom');
axis equal;
xlim padded
输出效果如下图