1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程

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

时间:2023-04-06 21:48:23

相关推荐

曲线绕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;endF_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)==6fimplicit3(Gamma,plotrange); %绘图elsefimplicit3(Gamma); %绘图endxlabel('x');ylabel('y');

测试输入1:

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

用户交互界面如下:

绘图效果如下:

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

测试样例2:

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

用户交互界面如下:

不愧为用脚敲的数据

绘图效果如下:

还莫名地可以,像个斜着的碗

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。