曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程

校内建模的一道题,虽然我认为这么trivial的东西前人早就造好轮子了,但是找遍所有能找到的网络资料、文献都没找到答案,只好自己造了个轮子。

设空间曲线

旋转得到的曲面方程为
,则
的方程为:

其中

证明

首先,任取

上一点
,则这一点绕
旋转得到的纬圆
的方程为:

因为

点的取法对
不失一般性,因此,当
点在
移动时,产生的全体纬圆扫过的全空间即为

因此

可以写为:

将③④⑤代入②:

可以反解出

为了形式简洁起见,令

,则

其中如果

是直线,那么
是一次函数,总有反函数。

如果

不是直线,那么在每一段单调区间内分别求反函数。(或者通过一些消元技巧绕开反函数)

再将

代入①式:

其中

证毕

一个引理都没用到的证明,就不给例子了,回头赶作业了,困死了。


来自半年后的更新——

新增MATLAB代码实现交互式输入:

注意,本代码仅支持直线绕直线旋转!!!

曲线绕直线旋转写代码太麻烦了,而且反函数不一定单值,处理起来很麻烦。

代码如下——

%先输入为被旋转曲线的参数方程
%再输入转轴的标准方程
close all;clear all;clc;
disp('请输入首先被旋转曲线'); %输入提示信息
prompt1='请输入x=f(t),例如x=2t+3,则输入数组[2 3]nx=';
f=input(prompt1);
prompt2='请输入y=g(t),例如y=4t+5,则输入数组[4 5]ny=';
g=input(prompt2);
prompt3='请输入z=h(t),例如y=6t+7,则输入数组[6 7]nz=';
h=input(prompt3);
disp(['您的被旋转曲线方程是:']);
disp(['x=(' num2str(f(1)) ')×t+(' num2str(f(2)) ')']);
disp(['y=(' num2str(g(1)) ')×t+(' num2str(g(2)) ')']);
disp(['z=(' num2str(h(1)) ')×t+(' num2str(h(2)) ')']);
disp('请输入首先旋转轴的直线标准方程:(x-x0)/m=(y-y0)/n=(z-z0)/p'); %输入提示信息
prompt4='请输入数组[m n p]n[m n p]=';
mnp=input(prompt4);
prompt5='请输入数组[x0 y0 z0]n[x0 y0 z0]=';
xyz=input(prompt5);
disp(['您的旋转轴直线方程是:']);
disp(['(x-(' num2str(xyz(1)) '))/(' num2str(mnp(1)) ')=']);
fprintf("%c",8) %删掉换行符号
disp(['(y-(' num2str(xyz(2)) '))/(' num2str(mnp(2)) ')=']);
fprintf("%c",8) %删掉换行符号
disp(['(z-(' num2str(xyz(3)) '))/(' num2str(mnp(3)) ')']);
F=[mnp(1)*f(1)+mnp(2)*g(1)+mnp(3)*h(1),mnp(2)*f(2)+mnp(2)*g(2)+mnp(3)*h(2)];
disp(['F=(' num2str(F(1)) ')t+(' num2str(F(2)) ')']) %调试用
if(F(1)==0)
    disp(['两直线垂直,方程退化,不予输出']);
    return;
end
F_1=[1/F(1) -F(2)/F(1)]; %F的逆为(1/a)t+(-b/a)
disp(['F^(-1)=(' num2str(F_1(1)) ')t+(' num2str(F_1(2)) ')']) %调试用
syms x y z;
F_1u=F_1(1)*(mnp(1)*x+mnp(2)*y+mnp(3)*z); %F^(-1)(mx+ny+pz)
Gamma=(x-xyz(1))^2+(y-xyz(2))^2+(z-xyz(3))^2 ...
-(f(1)*F_1u+f(2)-xyz(1))^2-(g(1)*F_1u+g(2)-xyz(2))^2-(h(1)*F_1u+h(2)-xyz(3))^2;
Gamma=expand(Gamma);
disp(['旋转曲面方程为:' char(Gamma) '=0']);
prompt6='请输入绘图区域[x0 x1 y0 y1 z0 z1],如输入0,则为默认区间n';
plotrange=input(prompt6);
if length(plotrange)==6
    fimplicit3(Gamma,plotrange); %绘图
else
    fimplicit3(Gamma); %绘图
end
xlabel('x');
ylabel('y');

测试输入1:

%测试样例1:圆锥
[1 0]
[0 0]
[1 0]
[0 0 1]
[0 0 0]
0

用户交互界面如下:

6f1a129b9b9897a308592716b5c4df54.png

绘图效果如下:

af9ddc60a54214f82bd0eb6d94613bc8.png
吐槽,这图片看着像个圣杯

测试样例2:

%测试样例2:奇怪的图形
[2 3]
[4 5]
[6 7]
[1 2 3]
[4 5 6]
[-15 15 -15 15 0 20]

用户交互界面如下:

90524f01560e0b687bf735233017a40f.png
不愧为用脚敲的数据

绘图效果如下:

2ee851668b100eaf042aaf186bdd8f79.png
还莫名地可以,像个斜着的碗

好了,去赶电磁学作业了。为啥网页上写的4月2日提交,截止日期设置的4月8日。今天4月4日才发现,哭了。


版权声明:本文为weixin_39667080原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。