曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程
生活随笔
收集整理的這篇文章主要介紹了
曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
校內(nèi)建模的一道題,雖然我認為這么trivial的東西前人早就造好輪子了,但是找遍所有能找到的網(wǎng)絡(luò)資料、文獻都沒找到答案,只好自己造了個輪子。
設(shè)空間曲線
: 繞 : 旋轉(zhuǎn)得到的曲面方程為 ,則 的方程為:其中
,證明:
首先,任取
上一點 ,則這一點繞 旋轉(zhuǎn)得到的緯圓 的方程為:因為
點的取法對 不失一般性,因此,當 點在 移動時,產(chǎn)生的全體緯圓掃過的全空間即為 。因此
可以寫為:將③④⑤代入②:
令
可以反解出
為了形式簡潔起見,令
,則其中如果
是直線,那么 是一次函數(shù),總有反函數(shù)。如果
不是直線,那么在每一段單調(diào)區(qū)間內(nèi)分別求反函數(shù)。(或者通過一些消元技巧繞開反函數(shù))再將
代入①式:其中
,證畢。
一個引理都沒用到的證明,就不給例子了,回頭趕作業(yè)了,困死了。
來自半年后的更新——
新增MATLAB代碼實現(xiàn)交互式輸入:
注意,本代碼僅支持直線繞直線旋轉(zhuǎn)!!!
曲線繞直線旋轉(zhuǎn)寫代碼太麻煩了,而且反函數(shù)不一定單值,處理起來很麻煩。
代碼如下——
%先輸入為被旋轉(zhuǎn)曲線的參數(shù)方程 %再輸入轉(zhuǎn)軸的標準方程 close all;clear all;clc; disp('請輸入首先被旋轉(zhuǎn)曲線'); %輸入提示信息 prompt1='請輸入x=f(t),例如x=2t+3,則輸入數(shù)組[2 3]nx='; f=input(prompt1); prompt2='請輸入y=g(t),例如y=4t+5,則輸入數(shù)組[4 5]ny='; g=input(prompt2); prompt3='請輸入z=h(t),例如y=6t+7,則輸入數(shù)組[6 7]nz='; h=input(prompt3); disp(['您的被旋轉(zhuǎn)曲線方程是:']); 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('請輸入首先旋轉(zhuǎn)軸的直線標準方程:(x-x0)/m=(y-y0)/n=(z-z0)/p'); %輸入提示信息 prompt4='請輸入數(shù)組[m n p]n[m n p]='; mnp=input(prompt4); prompt5='請輸入數(shù)組[x0 y0 z0]n[x0 y0 z0]='; xyz=input(prompt5); disp(['您的旋轉(zhuǎn)軸直線方程是:']); 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)) ')']) %調(diào)試用 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)) ')']) %調(diào)試用 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(['旋轉(zhuǎn)曲面方程為:' char(Gamma) '=0']); prompt6='請輸入繪圖區(qū)域[x0 x1 y0 y1 z0 z1],如輸入0,則為默認區(qū)間n'; plotrange=input(prompt6); if length(plotrange)==6fimplicit3(Gamma,plotrange); %繪圖 elsefimplicit3(Gamma); %繪圖 end xlabel('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]用戶交互界面如下:
不愧為用腳敲的數(shù)據(jù)繪圖效果如下:
還莫名地可以,像個斜著的碗好了,去趕電磁學(xué)作業(yè)了。為啥網(wǎng)頁上寫的4月2日提交,截止日期設(shè)置的4月8日。今天4月4日才發(fā)現(xiàn),哭了。
總結(jié)
以上是生活随笔為你收集整理的曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小红帽linux操作教程_【免费】Lin
- 下一篇: 国民技术是做什么的 国家集成电路设计企业