又到了一年一度的520网络情人节,不知许多朋友们是否因为不知如何以不落窠臼的方式表白而苦恼呢?不用急,今天我们带给大家一组以心形线公式。希望这种独特的数学表白,能够对大家有所启发。
1. 笛卡尔心形线
这是zui经典的心形线,其数学形式简洁明了,相传是笛卡尔向瑞典一个小公国的公主写情书时使用的——不过该典故无法严格考证,毕竟这一类的名人小故事太多了,诸如贝多芬与《月光》、牛顿的苹果树、爱迪生救妈妈、瓦特的烧水壶……要么已被证明是假的,要么是在真实历史的基础上加工而成的。但无论其真实性如何,故事的浪漫与凄美是毋庸置疑的。言归正传,下面给出笛卡尔心形线的方程(极坐标形式,直角坐标请自行推导):
MATLAB作图代码和作图结果如下:
clear; close all;
% 笛卡尔心形线
theta=linspace(0,2*pi,361);
r=1-sin(theta);
x=r.*cos(theta);
y=r.*sin(theta);
equation='$$\it{r}\rm{=1-sin(}\it{\theta}\rm{)}$$';
c=figure;
plot(x,y,'Color','#A2142F','LineWidth',2);
xlabel('\it{x}','FontName','Times New Roman','FontSize',15);
ylabel('\it{y}','FontName','Times New Roman','FontSize',15);
c.InnerPosition=[400 100 400 400];
c.Resize="off";
xlim([-2,2]); ylim([-2.5,1.5]);
xticks(-1.5:0.5:1.5); yticks(-2:0.5:1);
c.CurrentAxes.XAxisLocation='origin';
c.CurrentAxes.YAxisLocation='origin';
c.CurrentAxes.InnerPosition=[0,0,1,1];
c.CurrentAxes.Box='off';
c.CurrentAxes.FontName='Times New Roman';
text(-1.7,1,equation,'Interpreter','latex','FontSize',15);
尽管笛卡尔心形线看起来很“胖”,跟生活中常见的心形也有明显差异,但它具有鲜明的运动学意义——两个匀速圆周运动叠加的轨迹(即摆线)。摆线在机械学、天文学等领域有着重要的应用。
数学领域对心形线并没有严格的定义,因此人们提出了许多其它的心形线方程,形状更加美观逼真,不过也适当牺sheng了曲线的简洁性和数学物理意义。下面介绍几种几种常见形式。
2. 一种参数方程心形线
方程为:
MATLAB作图代码和作图结果如下:
clear; close all;
% 心形线
t=linspace(0,2*pi,361);
x=16*(sin(t)).^3;
y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
equation={'$$\it{x}\rm{=16sin^{3}\,}\it{t}$$',...
'$$\it{y}\rm{=13cos\,}\it{t}\rm{-5cos\,2}\it{t}\rm{-2cos\,3}\it{t}\rm{-cos\,4}\it{t}$$'};
c=figure;
plot(x,y,'Color','#A2142F','LineWidth',2);
xlabel('\it{x}','FontName','Times New Roman','FontSize',15);
ylabel('\it{y}','FontName','Times New Roman','FontSize',15);
c.InnerPosition=[400 100 400 350];
c.Resize="off";
xlim([-20,20]); ylim([-20,15]);
xticks(-15:5:15); yticks(-15:5:10);
c.CurrentAxes.XAxisLocation='origin';
c.CurrentAxes.YAxisLocation='origin';
c.CurrentAxes.InnerPosition=[0,0,1,1];
c.CurrentAxes.Box='off';
c.CurrentAxes.FontName='Times New Roman';
text(-18,-17,equation,'Interpreter','latex','FontSize',11);
3. 心形线-上下拼接而成
这种心形线由上下两段拼接而成,分别由不同的函数方程描述,因此几乎没有任何数学意义。但是形状美观,并且比较“苗条”。方程为:
MATLAB作图代码和作图结果如下:
clear; close all;
% 心形线-上下拼接而成
x=-2:0.01:2;
y1=sqrt(1-(abs(x)-1).^2);
y2=acos(1-abs(x))-pi;
equation={'$$\it{y}\rm{_1=}\sqrt{1-\left(|\it{x}\rm{|-1}\right)^2}$$',...
'$$\it{y}\rm{_2=acos}\left(1-|\it{x}\rm{|}\right)-\pi$$'};
c=figure;
plot(x,y1,x,y2,'Color','#A2142F','LineWidth',2);
xlabel('\it{x}','FontName','Times New Roman','FontSize',15);
ylabel('\it{y}','FontName','Times New Roman','FontSize',15);
c.InnerPosition=[400 100 500 550];
c.Resize="off";
xlim([-2.5,2.5]); ylim([-3.5,1.5]);
xticks(-2:0.5:2); yticks(-3:0.5:1);
c.CurrentAxes.XAxisLocation='origin';
c.CurrentAxes.YAxisLocation='origin';
c.CurrentAxes.InnerPosition=[0,0,1,1];
c.CurrentAxes.Box='off';
c.CurrentAxes.FontName='Times New Roman';
text(-2.3,-2.4,equation,'Interpreter','latex','FontSize',11);
4. 心形线-半个椭圆及其镜像的拼接
方程为:
MATLAB作图代码和作图结果如下:
clear; close all;
% 心形线-半个椭圆及其镜像拼接
x2=[40:(-0.5):(0.5), 0:0.5:40];
x=[-sqrt(40:(-0.5):(0.5)), 0, sqrt(0.5:0.5:40)];
y1=0.6*sqrt(x2)+0.8*sqrt(-x2+40);
y2=0.6*sqrt(x2)-0.8*sqrt(-x2+40);
equation='$$5\it{y}\rm{^2-6|}\it{x}\rm{|}\it{y}\rm{+5}\it{x}\rm{^2-128=0}$$';
c=figure;
plot(x,y1,x,y2,'Color','#A2142F','LineWidth',2);
xlabel('\it{x}','FontName','Times New Roman','FontSize',15);
ylabel('\it{y}','FontName','Times New Roman','FontSize',15);
c.InnerPosition=[400 100 400 350];
c.Resize="off";
xlim([-8,8]); ylim([-6,8]);
xticks(-6:2:6); yticks(-4:2:6);
c.CurrentAxes.XAxisLocation='origin';
c.CurrentAxes.YAxisLocation='origin';
c.CurrentAxes.InnerPosition=[0,0,1,1];
c.CurrentAxes.Box='off';
c.CurrentAxes.FontName='Times New Roman';
text(0,3,equation,'HorizontalAlignment','center','Interpreter','latex','FontSize',15);
关于上述心形线的方程,细心的朋友不难发现,它是中心位于原点、长短轴倾斜45°的椭圆和自身关于坐标轴镜像拼接的结果。下面这段作图代码可以直观地展现这一点。
clear; close all;
% 心形线-半个椭圆及其镜像拼接的演示
x2=[40:(-0.5):(0.5), 0:0.5:40];
x=[-sqrt(40:(-0.5):(0.5)), 0, sqrt(0.5:0.5:40)];
y1=0.6*sqrt(x2)+0.8*sqrt(-x2+40);
y2=0.6*sqrt(x2)-0.8*sqrt(-x2+40);
y3=-y2;
y4=-y1;
equation='$$5\it{y}\rm{^2-6|}\it{x}\rm{|}\it{y}\rm{+5}\it{x}\rm{^2-128=0}$$';
c=figure;
plot(x,y1,x,y2,'Color','#A2142F','LineWidth',2); hold on;
plot(x,y3,x,y4,'Color','#4DDBDF','LineWidth',2,'LineStyle','--');
xlabel('\it{x}','FontName','Times New Roman','FontSize',15);
ylabel('\it{y}','FontName','Times New Roman','FontSize',15);
c.InnerPosition=[400 100 400 400];
c.Resize="off";
xlim([-8,8]); ylim([-8,8]);
xticks(-6:2:6); yticks(-6:2:6);
c.CurrentAxes.XAxisLocation='origin';
c.CurrentAxes.YAxisLocation='origin';
c.CurrentAxes.InnerPosition=[0,0,1,1];
c.CurrentAxes.Box='off';
c.CurrentAxes.FontName='Times New Roman';
text(0,3,equation,'HorizontalAlignment','center','Interpreter','latex','FontSize',15);