命题1: 椭圆外一点向椭圆做两条切线,若两切线垂直,则点的轨迹为圆形。
简单说明下为啥: 对于椭圆 x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2}=1 a2x2+b2y2=1,假设其过 ( m , n ) (m,n) (m,n)点的切线方程为 y − n = k ( x − m ) y-n=k(x-m) y−n=k(x−m),带入得椭圆方程得:
b 2 x 2 + a 2 ( k 2 ( x − m ) 2 + 2 n k ( x − m ) + n 2 ) − x 2 b 2 = 0 ( a 2 k 2 + b 2 ) x 2 + 2 k a 2 ( n − m k ) x + a 2 ( k m − n ) 2 − a 2 b 2 = 0 \begin{aligned} &b^2x^2+a^2(k^2(x-m)^2+2nk(x-m)+n^2)-x^2b^2=0\\ &(a^2k^2+b^2)x^2+2ka^2(n-mk)x+a^2(km-n)^2-a^2b^2=0 \end{aligned} b2x2+a2(k2(x−m)2+2nk(x−m)+n2)−x2b2=0(a2k2+b2)x2+2ka2(n−mk)x+a2(km−n)2−a2b2=0
由于求的是切线因而 Δ = 0 \Delta=0 Δ=0,即 ( m 2 − a 2 ) k 2 − 2 m n k + n 2 − b 2 (m^2-a^2)k^2-2mnk+n^2-b^2 (m2−a2)k2−2mnk+n2−b2,这是一个关于 k k k的约束条件,由伟达定理得到两条切线的斜率 k 1 , k 2 k_1,k_2 k1,k2满足条件: k 1 k 2 = n 2 − b 2 m 2 − a 2 k_1k_2=\frac{n^2-b^2}{m^2-a^2} k1k2=m2−a2n2−b2 由于两切线垂直,因此 k 1 k 2 = − 1 k_1k_2=-1 k1k2=−1,因而有: m 2 + n 2 = a 2 + b 2 m^2+n^2=a^2+b^2 m2+n2=a2+b2 是一个半径为 a 2 + b 2 \sqrt{a^2+b^2} a2+b2 的圆。
可视化效果:
MATLAB代码:
function directorC
% @author : slandarer
% 公众号 : slandarer随笔
% 知乎 : hikari
a=3;b=2;syms k
% axes基础属性设置
ax=gca;
hold on;grid on
ax.XLim=[-6,6];
ax.YLim=[-4,4];
ax.DataAspectRatio=[1,1,1];
ax.XAxisLocation='origin';
ax.YAxisLocation='origin';
ax.LineWidth=1.5;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.GridLineStyle='-.';
ax.GridAlpha=.09;
% 绘制圆和椭圆
t=linspace(0,2*pi,200);
plot(a.*cos(t),b.*sin(t),'LineWidth',2.5,'Color',[0,118,168]./255)
plot(sqrt(a^2+b^2).*cos(t),sqrt(a^2+b^2).*sin(t),'LineWidth',2.5,'Color',[169,64,71]./255)
% 绘制切线和交点
thetaList=linspace(0,2*pi,200);
kline1=plot(0,0,'-.','LineWidth',1.5,'Color',[1,1,1].*.5);
kline2=plot(0,0,'-.','LineWidth',1.5,'Color',[1,1,1].*.5);
kpnt=scatter(a,0,'filled','CData',[1,1,1].*.3);
X=-6:.1:6;
% 循环绘图
for i=1:length(thetaList)
theta=thetaList(i);
m=sqrt(a^2+b^2).*cos(theta);
n=sqrt(a^2+b^2).*sin(theta);
kk=double(solve((m^2-a^2)*k^2-2*m*n*k+n^2-b^2==0));
Y1=kk(1).*(X-m)+n;Y2=kk(2).*(X-m)+n;
kline1.XData=X;kline1.YData=Y1;
kline2.XData=X;kline2.YData=Y2;
kpnt.XData=m;
kpnt.YData=n;
drawnow;
pause(.01)
end
end
旋转的错觉
命题2: 假设有半径为 r 2 \frac{r}{2} 2r的小圆在半径为 r r r大圆内滚动,小圆上的点轨迹为直线。
证明很简单,假设此时小圆上有一点与大圆接触,且此时小圆圆心与原点的连线与x轴正方向的夹角为 θ 0 \theta_0 θ0,现假设小圆滚动导致小圆圆心夹角变化 θ \theta θ,由于小圆半径为大圆的一半,因而当滚过相同路程时,小圆上的点的夹角反方向变化 2 θ 2\theta 2θ因而可以求出该小圆上点位置变化参数方程:
{ x = r 2 c o s ( θ 0 + θ ) + r 2 c o s ( θ 0 + θ − 2 θ ) y = r 2 s i n ( θ 0 + θ ) + r 2 s i n ( θ 0 + θ − 2 θ ) ⇒ { x = ( r 2 c o s ( θ ) ) c o s ( θ 0 ) y = ( r 2 c o s ( θ ) ) s i n ( θ 0 ) \begin{aligned} &\left\{\begin{matrix} x=\frac{r}{2}cos(\theta_0+\theta)+\frac{r}{2}cos(\theta_0+\theta-2\theta)\\ y=\frac{r}{2}sin(\theta_0+\theta)+\frac{r}{2}sin(\theta_0+\theta-2\theta)\\ \end{matrix}\right. \\ \Rightarrow &\left\{\begin{matrix} x=(\frac{r}{2}cos(\theta))cos(\theta_0)\\ y=(\frac{r}{2}cos(\theta))sin(\theta_0) \end{matrix}\right. \end{aligned} ⇒{x=2rcos(θ0+θ)+2rcos(θ0+θ−2θ)y=2rsin(θ0+θ)+2rsin(θ0+θ−2θ){x=(2rcos(θ))cos(θ0)y=(2rcos(θ))sin(θ0)
这不就是一个过原点,角度为 θ 0 \theta_0 θ0的直线嘛,证明完毕,小圆上所有点都走直线,为了可视化看起来好看,这里画几个等分的点搞一些可视化:
可视化效果:
MATLAB代码:
function PointOnLineInCircle(N)
% @author : slandarer
% 公众号 : slandarer随笔
% 知乎 : hikari
if nargin
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?