前段时间朋友给我发了一道中学的几何题让我做,题目是这样的:
Tips:题目中所要求的角度和两圆的半径无关。
暴力求解
刚开始看到这道题的时候,我并不知道所要求的角度是不会随着两个圆的半径而变化的。
所以直接设两个圆的半径分别为R1,R2,通过用几次余弦定理和勾股定理就可以算出来了。
为了求出这个角度具体是多少,我写了一个Matlab程序,最后算出来是45°。
1 | clear;clc; |
其实求解到这里就可以结束了,但我觉得这道题挺有意思,想画一个动图看一下半径变化过程中角度的变化,于是在网上找了一些关于如何在Matlab中画动图的方法,最后采用循环绘图的方法实现,效果如下图,代码见附录。
几何证明
后来朋友告诉我这道题有更简单的几何解法:)
1、设左/右边圆心为O1/O2,所求角顶点为A,两圆切点为B,左/右边的顶点为C/D,连接O1A,AB;
2、利用CABO1内角和360度,并且O1是圆心&CAB都在圆上,有两个等腰三角形(不一定全等)进而得到角相等,即BAO2为45度;
3、而角BDO2亦为45度,则有ABDO2共圆(判定:同侧共底三角形的顶角相等,则四点共圆);
4、又由四点共圆性质,得角?=角DAO2=45度。
附录:Matlab代码
主函数:main.m
1 | close all; |
直线和圆求交函数:intersection_coordinate.m
1 | function [x0, y0] = intersection_coordinate(r1, r2) |