2023年場(chǎng)論與復(fù)變函數(shù)大作業(yè)_第1頁(yè)
2023年場(chǎng)論與復(fù)變函數(shù)大作業(yè)_第2頁(yè)
2023年場(chǎng)論與復(fù)變函數(shù)大作業(yè)_第3頁(yè)
2023年場(chǎng)論與復(fù)變函數(shù)大作業(yè)_第4頁(yè)
2023年場(chǎng)論與復(fù)變函數(shù)大作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

場(chǎng)論與復(fù)變函數(shù)大作業(yè)

問(wèn)題1

問(wèn)題I描述,在圓環(huán)內(nèi)一點(diǎn)(xO,yO)處有一條光線射出

圓環(huán)半徑為R

推導(dǎo)該光線通過(guò)m次反射后方向的公式,隨著(xO,y0)的不同,分析按照相同方向射出的光

線反射方向有什么特點(diǎn)?3給定(xO,y0),分析按照不同方向射出的光線反射方向有什么特

點(diǎn)?j

分析:

給定起始點(diǎn)(X,y),反射角angle,反射次數(shù)n

根據(jù)(x,y),angIe可以計(jì)算出入射光線在圓周上的兩個(gè)(xO,yo)(xlzyl)o

計(jì)算方法如下:

doublek=tan(ang1e);

doub1exl,yl;〃設(shè)出弦長(zhǎng)中點(diǎn)的坐標(biāo),輔助求解交點(diǎn)

doublelength;〃反射弦長(zhǎng)的一半

x1=k*(k*xO-y0)/(k*k+1);

yl=-(k*xO-yO)/(k*k+1);

length=(double)sqrt((double)(R*R-x1*x1-y1*y1));

pnode[O].x=x1-1ength*cos(angle);

pnode[0].y=yl-length*sin(angle);

pnode[l].x=x1+1ength*cos(angle);

pnode[l].y=y1+Iength*sin(angle);

然后由(xO,yO)(x1,yl)可得出(x2,y2);同理由(xi,yi)(xi?1,yi—1)可求出(xi

+l,yi+l),依次即可求出所有反射點(diǎn)

實(shí)現(xiàn)方法:

pnode[i+l].x=2*(pnode[i].x)*((pnode[i—1].x)*(pnode[i].x)+(pno

de[i-1].y)*(pnode[i].y))-(pnode[i-1].x);

pnode[i+1].y=2*(pnode[i].y)*((pnode[i-l].x)*(pnode[i].x)+(pnode[i

—11.y)*(pnode[i].y))-(pnode[i-1].y);

用C語(yǔ)言編寫(xiě)代碼運(yùn)營(yíng)結(jié)果如下:

*C:\Users\yunshijie\Documents\VisualStudio2010\Projects\001\Debug\001.exeIT回

請(qǐng)依次輸入起始點(diǎn)坐標(biāo)x。.90,入射角angle<-i80,1801,反射次教n

格式:x0,y。,angle,n圓半徑為1

0.5,0.3,62,30

疑過(guò)3。次反射后,此時(shí)光線的方向?yàn)?(0.871522,0.490356〉—><0.158049,-0.987431>

付詳細(xì)過(guò)程Y/N(退出)?

:0<start<end<=n

圈注:預(yù)留。,。輸入為退出標(biāo)志

寥虛3次反射后,

此時(shí)光線的方向?yàn)?(0.152016,0.988378〉—><0.874500,-0.485025)

經(jīng)過(guò)24次反射后,此時(shí)光線的方向?yàn)?(0.874500,-0.485025)—><-0.757957,-0.652304

法125次反射后,

此時(shí)光線的方向?yàn)?(-0.757957,-0.652304>—><-0.349312,0.937006

全過(guò)26次反射后,

此時(shí)光線的方向?yàn)?(-0.349312,0.93?006>—><0.999995,0.003053>

經(jīng)過(guò)27次反射后,此時(shí)光線的方向?yàn)?(0.999995,0.003053>—><-0.343584,-0.939122>

經(jīng)過(guò)28次反射后,此時(shí)光線的方向?yàn)?(-0.343584,-0.939122>—><-0.761926,0.647664

經(jīng)過(guò)29次反射后,此時(shí)光線的方向?yàn)?(-0.761926,0.647664)—><0.871522.0.490356〉

經(jīng)過(guò)30次反射后,此時(shí)光線的方向?yàn)?0.871522,0.490356)—><0.158049,-0.987431>

翻譯成MATLAB語(yǔ)言,作圖效果:

結(jié)論

隨著(xO,yO)的不同,分析按照相同方向射出的光線反射方向有什么特點(diǎn)?

取(0.5,03)為發(fā)射點(diǎn),角度分別用45,60,75反射25次作圖比較

給定(xO,yO),分析按照不同方向射出的光線反射方向有什么特點(diǎn)?

擬定入射角為62°,反射25次。入射點(diǎn)依次取(-0.5,0.3)(0,0.3)(0.5,

附C程序代碼

/*****************************************************************

***********************************************************

**************************

復(fù)變函數(shù)大作業(yè)程

序:(?)

bb°°姓名:15世潔。602103094

。0。。000011:2023.11.27

*****************************************************************

***************************************************************

***********************/

#inc1ude<stdio.h>

#inc1ude<math.h>

#inelude<conio.h>

#defineR1//圓的半徑備注:修改時(shí),注意改變后面printf函數(shù)輸出時(shí)的格式

typedefstructpnode。。//一個(gè)點(diǎn)的坐標(biāo)

(

doub1ex;

doubley;

}Coordinate;

Coordinatepnode[100]={0,0};〃儲(chǔ)存各反射點(diǎn)坐標(biāo)

〃■^函明*****************************************************

**********************************************************

*******************************

voidmy_func(inti);〃重要功能函數(shù),計(jì)算各反射點(diǎn)

voidmy_init(doublexO,doubleyO,doubleangIe);〃初始化條件

voidlieju(intstartJntend);〃輸出第start到第end次反射過(guò)程

******************************************************

****************************************************************

*********************************

voidmain()

(

inti,nzstart,end;

ocharinput_f1ag=1,f1ag=0;

doubIeang1ezx0,y0;

owhile(input_flag)

(

。叩rintf("請(qǐng)依次輸入起始點(diǎn)坐標(biāo)x0,y0,入射角angle(-180,180],反射次數(shù)n\n格式:

圓半徑為/注意的輸出格式

x0,yO,anglezn%d\n”,R);/R

M

sscanf("%lfz%lfz%lf,%dz&xO,&yO,&ang1e,&n);

。if((xO*xO+yO*yO<R*R)&&(-180<angle)&&(angle<=180)&&(n>0))

input_f1ag=0;

?e1se

sPrintf(H輸入錯(cuò)誤,請(qǐng)重新輸入\n");

}

my—init(x0,yO,ang1e);//初始化

for(i=1;i<=n;i++)

(

。my_func(i);

°}

叩rintf("通過(guò)%(1次反射后,此時(shí)光線的方向?yàn)椋?%lf,%lf)-->(%lf,%If)\n",n,pno

de[n].x,pnode[n].y,pnode[n+l].x,pnode[n+1].y);

叩rintf("請(qǐng)問(wèn)是否需要反射具體過(guò)程Y/N(退出)?\n");

while(flag!=Y&&flag!='y'&&flag!='N'&&flag!='n')

?flag=getch();

)

oif(flag==zY'I|flag==y)

(

3input__flag=1;

whi1e(input_flag)

00{

。oPrintf(“請(qǐng)輸入需要的過(guò)程:0<start<end<=n\n格式:star3end\n備注:預(yù)留

0,0輸入為退出標(biāo)志\n");

。3scanf("%d,%d”,&star3&end);

。if(0<start&&start<end&&end<=n)

°。。input_f1ag=0;

。e1seif(end==0&&start==0)

o。b「eak;

o*oelse

。。。printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");

。}

。if(input_flag==0)

0(

1ieju(start,end);

。printf("按任意鍵退出)

??getch();

)

)

/************************************************************

**************************************************************

********************************

000000子函數(shù)

名稱(chēng):my_init

功能:初始化條件,為后續(xù)計(jì)算各點(diǎn)坐標(biāo)提供初始條件pnode⑼,pnode[1]

輸入?yún)?shù):入射點(diǎn)坐標(biāo):doublex0,doub1eyO。入射角:doubleangIe

返回值:void

備注:各公式推導(dǎo),附word文檔

***********************************************************

****************************************************************

*******************************/

voidmy_init(doubIexO,doubIeyO,doubleangIe)

(

。if(angle==90)

{

epnode[0].x=pnode[1].x=xO;

?pnode[0].y=-sqrt(R*R—x0*x0);

?pnode[l].y=sqrt(R*R—xO*x0);

)

?e1seif(angle==-90)

pnode[0].x=pnode[l].x=x0;

?pnode[O].y=sqrt(R^R-xO*xO);

3pnode[l].y=-sqrt(R^R—xO*xO);

}

elseif(angle==0)

°(

epnode[0].y=pnode[1].y=y0;

pnode[0].x=-sqrt(R*R—yO*y0);

。叩node[1].x=sqrt(RR-yO*yO);

)

elseif(angle==180)

°(

。pnode[0].y=pnode[l].y=y0;

。叩node[0].x=sqrt(R*R-yO*y0);

?pnode[1].x=-sqrt(R*R-yO*y0);

)

。else

°{

o。doubIek=tan(angle);

。。doublex1,y1;〃設(shè)出弦長(zhǎng)中點(diǎn)的坐標(biāo),輔助求解交點(diǎn)

。doublelength;〃反射弦長(zhǎng)的一半

x1=k*(k*x0-y0)/(k*k+1);

yl=—(k*xO-y0)/(k*k+1);

1ength=(double)sqrt((double)(R*R-x1*xl—yl*y1));

pnode[0].x=x1-1ength*cos(angle);

。pnode[0].y=yl-Iength*sin(angIe);

3pnode[1].x=x1+length*cos(ang1e);

。。pnode[1].y=yl+1ength*sin(ang1e);

)

}

/******************^Kj-

****************************************************************

**************************?*?*****

名稱(chēng):my_func

功能:根據(jù)初始化計(jì)算出來(lái)的Pnode[0],pnode[1]計(jì)算以后各反射點(diǎn)坐標(biāo)

輸入?yún)?shù):inti(第i次反射)

返回值:void

*******************************************************

*******************************************************************

******************??*************/

voidmy_func(inti)

(

pnode[i+l].x=2*(pnode[i].x)*((pnode[i—l],x)*(pnode[i].x)+(pnode

Li-1].y)*(pnodeLi].y))-(pnode[i—1].x);

pnode[i+1].y=2*(pnode[i].y)*((pnode[i-l].x)*(pnode[i].x)+(pno

de[i-1].y)*(pnode[i].y))-(pnode[i-l].y);

)

/****************************************************

**********************************************************

********************************************

名稱(chēng):lieju

功能:根據(jù)用戶需要,列舉中間過(guò)程

輸入?yún)?shù):開(kāi)始intstart,結(jié)束intend

返回值:void

*************************************************************

*****************************************************************

****jUj"*************/

voidlieju(intstart,intend)

(

intk;

ofor(k=start;k<=end;k++)

°{

。。print")通過(guò)%(1次反射后,此時(shí)光線的方向?yàn)?1f)一一>(%lf,%lf)\n“,k,pno

de[k].xzpnode[k].y,pnode[k+l].x,pnode[k+1].y);

)

)

附matlab程序代碼

%假設(shè)圓的半徑為i

disp1ay(,請(qǐng)輸入入射的坐標(biāo)廠);

x=input(zX:');

y=input('Y:');

display「請(qǐng)輸入入射角度)

degree=input('(角度)');

degree=mod(degree,360);

%初始化

ifdegree==O

end_y=y;

start_y=end_y;

start_x=-sqrt(l-yA2);

end_x=-start_x;

eIseifdegree==l80

start_y=y;

end_y=y;

start_x=sqrt(1-yA2);

end_x=-start_x;

elseifdegree==90

end_x=x;

start_x-x;

start_y=-sqrt(1—xA2);

end_y=-start_y;

e1seifdegree==270

start_x=x;

end_x=x;

start_y=sqrt(l-xA2);

end_y=-start_y;

else

degree=degree*pi/180;

k=tan(degree);

x1=k*(k*x-y)/(k*k+1);

yl=—(k*x-y)/(k*k+1);

1en=sqrt(l-x1八2—ylA2);

start_x=x1-Ien*cos(degree);

start_y=yl-len*sin(degree);

end—x=xl+1en*cos(degree);

end_y=yl+len*sin(degree);

end

x_temp=x:(end_x-x)/200:end—x;

y_temp=y:(end_y-y)flQ0:end_y;

%開(kāi)始反射

m=input(,請(qǐng)輸入反射的次數(shù));

clareset

figure(1);

ezplot('xA2+yA2=l');

holdon;

plot(x,y/*');

ho1don;

pIot(x_temp,y_ternp,'rr);

holdon;

i=l;

whilei<=m

i=i+1;

x=2*end_x*(start_x*end_x+start_y*end—y)-start_x;

y=2*end_y*(start_x*end_x+start_y*end_y)—start_y;

start_x=end_x;

start_y=end_y;

end_x=x;

end_y=y;

x_temp=start_x:(end_x—start_x)/200:end_x;

y_temp=start—y:(end_y-start__y)/200:end_y;

p1ot(x_temp,y_temp/r7);

holdon;

end

plot(end—x,end_yz'*');

axis([-l1-11]);%調(diào)整x軸y軸坐標(biāo)范圍

axissquare;%使x軸y軸等長(zhǎng)

gridon;

clear;

問(wèn)題2

問(wèn)題I描述,在圓柱口面上一點(diǎn)(xO,yO,zO)處有一條光線射入)圓柱半徑為R,長(zhǎng)H

推導(dǎo)該光線反射回口面的位置及方向公式,隨著入射點(diǎn)位置不同分析反射波有什么特點(diǎn)?

隨著入射點(diǎn)方向不同分析反射波有什么特點(diǎn)?

隨著H/R比值不同分析反射波有什么特點(diǎn)?

分析

可以吧入射速度分解成z軸方向上的和xoy平面內(nèi)的分量

在平面上可以運(yùn)用問(wèn)題1中的函數(shù)求解平面上的反射

在z軸方向上,讓光線走2L長(zhǎng)度即可

用C語(yǔ)言編寫(xiě)代碼運(yùn)營(yíng)結(jié)果

?C:\Users\yunshijie\Documents\VisualStudio2010\Projects\002\Debug\002.exe

請(qǐng)以此輸入入射點(diǎn)在xoy平面內(nèi)的掾影坐標(biāo)X0,90,圓柱筒長(zhǎng)度deep,

入射遞度U沿x軸,y軸,好防向工的分量u_x.u_y,u_z<<0)

輸入格式:xx0O,y,y0O,leJnegntght,hu,_ux/,'uU_Vy,'uu_-z圓柱筒半徑為1

0.5,0.3,3,1,2,—0.5

經(jīng)過(guò)26次反射出射點(diǎn)坐標(biāo)為(0.759i2i,0.446322,3.000B00>,方向?yàn)?lt;-0.349849,-0.93679

1,2.791298)—><0.759121,0.446322,3.000000>

請(qǐng)回是否需要反射詳細(xì)過(guò)程Y/N〈退出〉?

請(qǐng)輸入需要的過(guò)程:0<start<end<=26

格式:start,end

牌注:預(yù)留。,。輸入為退出標(biāo)志

21,26

經(jīng)過(guò)21次反射后,此時(shí)光線的方向?yàn)?(-0.309783,-0.95080?,1-673264>—><0.814443,

0.580243.1.896871)

經(jīng)過(guò)22次反射后,此時(shí)光線的方向?yàn)?(0.814443,0.580243,1.8968?!>—><-0.999841,0

.01????,2.120478)

經(jīng)過(guò)23次反射后,此時(shí)光線的方向?yàn)?(-0.999841,0.017??7,2.120478>—><0.793300,-

忸.608828,2.344085)

匿過(guò)24次反射后,此時(shí)光線的方向?yàn)?(0.793300,-0.608828,2.344085>—><-0.275780,

k961216,2.567692>

經(jīng)過(guò)25次反射后,此時(shí)光線的方向?yàn)?(-0.275780,0.961216,2.567692>—><-0.349849,

-0.936791,2.791298)

經(jīng)過(guò)26次反射后,此時(shí)光線的方向?yàn)?I:-0.349849,-0.936791,2.?91298>—><0.759121,

0.446322,3.000000>

按任意鍵退出.

翻譯成matlab語(yǔ)言,做出射點(diǎn)的投影圖

當(dāng)入射點(diǎn)Xoy平面的投影點(diǎn)為(0,0)

角度b(入射方向與圓柱兩底的夾角)保持不變

角度a(入射方向在平面上投影與x軸的夾角)從0到2n變化

得到的圖像為一圓,即此時(shí)出射點(diǎn)落在該圓上

當(dāng)入射點(diǎn)xoy平面的投影點(diǎn)為(0,0)

角度b(入射方向與圓柱兩底的夾角)從0到n變化

角度a(入射方向在平面上投影與x軸的夾角)保持不變

得到一條過(guò)原點(diǎn)的直線

當(dāng)a,b均改變時(shí)

得到幾個(gè)圓域,有圖分析可知,出射點(diǎn)均落在這些圓上

結(jié)論

由上述所知,當(dāng)入射點(diǎn)投影為(0,0)時(shí),出射點(diǎn)落在幾個(gè)半徑不同的半圓域上(見(jiàn)上圖)

隨著入射點(diǎn)位置不同分析反射波有什么特點(diǎn)?

當(dāng)入射點(diǎn)投影為(0.3,0.5)時(shí)

(這個(gè)出射點(diǎn)投影域----是什么東西!!!????兩個(gè)外星人么??)

分開(kāi)看

角度b(入射方向與圓柱兩底的夾角)保持不變

角度a(入射方向在平面上投影與x軸的夾角)從0到2頁(yè)變化

各種像這樣的軸對(duì)稱(chēng)圖形,沒(méi)發(fā)現(xiàn)其他明顯規(guī)律

角度b(入射方向與圓柱兩底的夾角)從0到口變化

角度a(入射方向在平面上投影與x軸的夾角)保持不變

這個(gè)大約可以看出是幾個(gè)箭頭行組成的區(qū)域

把間隔調(diào)到最密,程序運(yùn)營(yíng)N久后。。.。。。。

大約可以看出

出射點(diǎn)在圓域的某一側(cè)分布比較密集,另一次較稀疏

分布為軸對(duì)稱(chēng)式

-1-0505

x

隨著入射點(diǎn)方向不同分析反射波有什么特點(diǎn)?j為分析簡(jiǎn)樸,拿(0,0)點(diǎn)作為定點(diǎn)

從上面關(guān)于(0,0)點(diǎn)的3個(gè)截圖中可以看出

角度a(入射方向在平面上投影與x軸的夾角)從。到2n變化時(shí)

隨a的增大,出射點(diǎn)與入射點(diǎn)連線與軸夾角不斷邊打切范圍為(0,2或(一",0)之一,具

體域吧取值有關(guān)

角度b(入射方向與圓柱兩底的夾角)從0到五變化是

隨b增大,出射點(diǎn)域偏離入射點(diǎn)域越來(lái)越遠(yuǎn)

附Q程序代碼

/*******************************************************

***************************************************************

*****************夫**************

復(fù)變函數(shù)大作業(yè)程序

(-)

。。。姓名:運(yùn)世潔。02103094

o。。日期:2023.11.27

***********************************************************

*************************************************************

*******************************/

#include<stdio.h>

#inc1ude<math.h>

#inc1ude<conio.h>

#defineR1〃圓的半徑備注:修改時(shí),注意改變后面pnntf函數(shù)輸出時(shí)的格式

typedefstructpnode。?!ㄒ粋€(gè)點(diǎn)的3維坐標(biāo)

(

odoublex;

。doubley;

◎doublez;

}Coordinate;

Coordinatepnode[100]={0,0,0};//儲(chǔ)存各反射點(diǎn)坐標(biāo)

11子函數(shù)聲明******************************************************

************************************************************

****************************

intmy_func(doubledeep,doubIer_length,doublev_x,doub1e

v_y,doublev_z);〃重要功能函數(shù),計(jì)算各反射點(diǎn),并返回總反射次數(shù)

intmyJnit(doublexO,doub1ey0,doublev_x,doublev_y);〃初始化條件,并返

回反射弦長(zhǎng)

voidlieju(intstartjntend);〃輸出第start到第end次反射過(guò)程

/1]****************-jjj*********

*******************************************************

*****************************************

voidmain()

(

。inti,n,start,end;

。charinput_f1ag=1,flag=O;

doubIeangIe,xO,y0,v_x,v_y,v_z,deep;

doub1er」ength;〃反射在xoy平面的弦長(zhǎng)

。while(input_flag)

(

printf("請(qǐng)以此輸入入射點(diǎn)在xoy平面內(nèi)的投影坐標(biāo)x0zy0,圓柱筒長(zhǎng)度deep,

\n入射速度V沿x軸,y軸,z軸方向上的分量v_x,v_y,v_z(<0)\n");

Printf("輸入格式:xO,y0Jength,v_x,v_y,v_z。。圓柱筒半徑為%d\n",R);〃坐

標(biāo)建立方式:以圓柱筒底面所在平面為xoy坐標(biāo)面

scanf%lf,%lf,%lf,%lf,%1f”,&x0,&y0,&deep,&v_x/&v_y/&v—z);

。if(x0*x0+yO*y0<R*R&&deep>0&&v—z<0&&v_xv_x+v_y*v_y>0)

。。。input_flag=0;

。else

o?oprintf("輸入錯(cuò)誤,請(qǐng)重新輸入\n”);

}

pnode[O].z=deep;

or_length=myjnit(x0,yO,v_x,v_y);

on=my_func(deep,r_Iength,v_xzv_y,v_z);

pnode[0].x=x0;

apnode[0],y=y0;

pnode[0].z=deep;

叩rintf(“通過(guò)%d次反射出射點(diǎn)坐標(biāo)為(%lf,%lf,%lf),方向?yàn)?%lf,%lf,%1f)->(%lf,%If,%lf)

\n,n,pnode[n+1].x,pnode[n+1].y,pnode[n+1].zzpnode[n].x,pnode

[n].y,pnode[n].z,pnode[n+l].x,pnode[n+1].y,pnode[n+1].z);

printf("請(qǐng)問(wèn)是否需要反射具體過(guò)程Y/N(退出)?\n");

owhile(flag!='Y'&&flag!=y&&flag!='N,&&flag!='n')

°(

。flag=getch();

°}

if(f1ag=='Y'||f1ag=='y,)

(

oinput_flag=1;

swhile(input_flag)

0o{

。。printf("請(qǐng)輸入需要的過(guò)程:0<start<end<=%d\n格式:starvend\n備注:預(yù)留

0,0輸入為退出標(biāo)志\n“,n);

ooscanf("%d,%d”,&startz&end);

。if(0<start&&start<end&&end<=n)

°。?input_flag=O;

?elseif(end==0&&start==0)

。ebreak:

eIse

。printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");

3if(input_flag==0)

6(

。lieju(startzend);

-printf("按任意鍵退出)

。getch();

00}

。}

}

intmy_init(doub1exO,doubIeyO,doublev_x,doublev_y)

(

doub1elength;〃反射弦長(zhǎng)的一半

。if(v—x==0&&v—y>0)

。{

3pnode[0].x=pnode[l].x=x0;

。pnodeL0].y=-sqrt(R*R—x0*x0);

epnode[l].y=sqrt(R*R-x0*x0);

1ength=2*pnode[1].y;

}

eIseif(v—x==0&&v—y<0)

°(

pnode[0].x=pnode[l].x=x0;

pnode[0].y=sqrt(R*R-xO*x0);

。pnode[1].y=—sqrt(R*R-x0*xO);

?Iength=2*pnode[0].y;

?elseif(v_x>0&&v_y—=0)

°{

。pnode[0].y=pnodeE1].y=yO:

?pnode[0].x=—sqrt(R*R-y0*y0);

。opnode[l].x=sqrt(R*R-y0*y0);

。Iength=2*pnode[l].x;

0)

eIseif(v_x<0&&v_y==0)

(

?pnode[0].y=pnode[l].y=y0;

oopnode[0].x=sqrt(R*R—yOyO);

?pnode[l].x=-sqrt(R*R-y0*y0);

1ength=2*pnode[0].x;

)

oelse

(

oodoubIek=(v_y/v_x);

doublexl,yl;//設(shè)出弦長(zhǎng)中點(diǎn)的坐標(biāo),輔助求解交點(diǎn)

。x1=k*(k*x0—y0)/(k*k+1);

oy1=-(k*xO-y0)/(k*k+1);

oolength=(doubIe)sqrt((double)(R*R—x1*xl-y1*yl));

pnode[0].x=xl-Iength*v__x/sqrt(v_x*v_x+v_y*v_y);

pnode[0].y=yl-1ength*v_y/sqrt(v_x*v_x+v_y*v_y);

pnode[l].x=x1+length*v_x/sqrt(v_x*v_x+v_y*v_y);

pnode[l].y=yl+length*v_y/sqrt(v_x*v_x+v_y*v_y);

)

。return(2*1ength);

)

intmy__func(doub1edeep,doubler_1ength,doublev__x,doublev_y,double

v_z)

(

ointi=2;

。doublez;

doub1elength_0=sqrt((pnode[0].x—pnode[1].x)*(pnode[0].x—pn

ode[1].x)+(pnode[0].y-pnode[l].y)*(pnode[0].y-pnode[l].y));

。doublev_xoy=sqrt(v_x*v_x+v_y*v_y);

0doub1etimeO=length_0/v_xoy;

opnodeEl].z=deep+timeO*v_z;

。z=deep+timeO*v_z+v_z*(r_1ength/v_xoy);

while(z>0)

0(

pnode[i].x=2*(pnodeEi-l].x)*((pnode[i-2].x)*(pnode[i-l].x)+

(pnode[i-2].y)*(pnode[i_l].y))—(pnode[i-2].x);

o?pnode[i].y=2*(pnode[i-l].y)*((pnode[i-2].x)*(pnode[i-1].x)+(pnod

e[i—2].y)*(pnode[i-l].y))-(Pnode[i-2].y);

。pnode[i].z=z;

。z=z+v_z*(r_1ength/v_xoy);

oi++;

}

。//需要加入底面反射點(diǎn)

0z=-Z;

〃計(jì)算底面反射點(diǎn)*****************************太麻煩了也不知道對(duì)不對(duì),備

,卡___**********************************************************

***************

i++;

?pnode[i].x=2*(pnode[i-2].x)*((pnode[i-3].x)*(pnode[i-2].x)+

(pnode[i-3].y)*(pnode[i—2].y))-(pnode[i-3].x);

pnode[i].y=2*(pnode[i-2].y)*((pnode[i—3],x)*(pnode[i-2].x)+

(pnode[i-3].y)*(pnode[i—2].y))-(pnode[i-3].y);

pnode[i].z=z;

。z=z—v_z*(r_length/v__xoy);

pnode[i—l].y=(pnode[i].z*pnode[i—2].y—pnode[i-2].z*pnode[i].y)/(pnode[i].z

-pnode[i-21.z);

3pnode[i-l].x=(pnode[i].z*pnode[i-2].x-pnode[i—2].z*pnode[i].x)/(pnodeLi],z

-pnode[i-2].z);

pnode[i-1].z=0;

i++;

。pnode。].x=2*(pnode[i-l].x)*((pnode[i-3].x)*(pnode[i-1].x)+

(pnode[i-3].y)*(pnodeLi-1].y))-(pnode[i-3].x);

opnode[i].y=2*(pnode[i-l].y)*((pnode[i-3].x)*(pnode[i-1].x)+(pno

de[i-3].y)*(pnode[i-l].y))—(pnode[i-3].y);

pnode[i].z=z;

。z=z-v_z*(r_Iength/v_xoy);

oi++;

〃********************************************************

**********************************************************

**********************************

。while(z<deep)

(

pnode[i].x=2*(pnode[i-1].x)*((pnodeLi-2].x)*(pnode[i-l].x)+

(pnode[i—2].y)*(pnode[i-1].y))-(pnode[i—2].x);

opnode[i].y=2*(pnode[i-l].y)*((pnode[i-2].x)*(pnode[i-1].x)+

(pnode[i-2].y)*(pnode[i-1].y))—(pnode[i-2].y);

。。pnode[i].z=z;

。。z=z-v_z*(r_length/v_xoy);

。。i++;

°)

。pnodeLi].z=deep;

opnode[i].x=2*(pnode[i-1].x)*((pnode[i-2].x)*(pnode[i-l].x)+

(pnode[i-2].y)*(pnode[i-l].y))-(pnode[i—2].x);

opnode[i].y=2*(pnode[i-1].y)*((pnode[i-2].x)*(pnode[i-11.x)

+(pnode[i-2].y)*(pnodeLi-1],y))-(pnode[i-2].y);

pnode[i].x=pnode[i-l].x+(pnode[i].x-pnode[i—l].x)*(deep-pnode[i—11.z)/(-v_z*(r_l

ength/v_xoy));

opnode[i].y=pnode[i—l].y+(pnode[i].y-pnode[i—l].y)*(deep-pnode[i-1].z)

/(-v_z*(r_1ength/v_xoy));

i--;

return(i);

voidlieju(intstart,intend)

ointk;

for(k=start;k<=end;k++)

(

。0printf("通過(guò)%~次反射后,此時(shí)光線的方向?yàn)椋?%lf,%lf,%1f)->(%lf,%1t%lf)\n”,k,

pnode[k].x,pnode[k].y,pnode[k].z,pnode[k+1].x,pnode[k+1].y,pnode

Lk+1].z);

0)

附mat1ab程序代碼

%**********************************主函************************

****

clareset

figure(1);

ezp1otCxA2+yA2=l');

hoIdon;

axis(L-11-11]);%調(diào)整x軸y軸坐標(biāo)范圍

axissquare;%使x軸y軸等長(zhǎng)

b=0.1;

whi1e(b<=pi)

a=0;

while(a<=2*pi)

[xl,y1]=Homework_2_Func(0,0,3,b);

Plot(xl,y1,'*,);

p1ot(xl,y1,7*');

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論