久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解

時(shí)間:2019-05-12 06:58:00下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解》。

第一篇:迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解

基于java實(shí)現(xiàn)電子時(shí)鐘

迭代法求兩點(diǎn)邊值問(wèn)題

(一)摘要

當(dāng)今的環(huán)境下,數(shù)值計(jì)算越來(lái)越依賴(lài)于計(jì)算機(jī)。大規(guī)模科學(xué)計(jì)算和工程技術(shù)中許多問(wèn)題的解決,最終歸結(jié)為大型稀疏線性方程組的求解,其求解時(shí)間在整個(gè)問(wèn)題求解時(shí)間中占有很大的比重,有的甚至達(dá)到80%。由于現(xiàn)今科學(xué)研究和大型項(xiàng)目中各種復(fù)雜的可以對(duì)計(jì)算精度和計(jì)算速度的要求越來(lái)越高。因此,作為大規(guī)模科學(xué)計(jì)算基礎(chǔ)的線性代數(shù)方程組的高效數(shù)值求解引起了人們的普遍關(guān)注。這種方程組的求解一般采用迭代法。這次我做的迭代法求兩點(diǎn)邊值問(wèn)題就是通過(guò)MATLAB來(lái)實(shí)現(xiàn)的。

關(guān)于迭代法,是有很多種解決公式的:Jacobi,G-S和超松弛迭代法。這三種方法的原理大致相同,jacobi需要給定初向量,G-S則需要給定初值,超松弛法是對(duì)Guass-Seidel迭代法的加權(quán)平均改造。而本文則是對(duì)大型稀疏線性方程組迭代求解與三種迭代法(Jacobi,Gauss-Seidel和超松弛迭代法)的收斂速度與精確解的誤差比較做出研究。

關(guān)鍵詞:數(shù)值計(jì)算 迭代法 三種公式

基于java實(shí)現(xiàn)電子時(shí)鐘

ITERATION METHOD FOR TWO-POINT BOUNDARY

VALUE PROBLEMS

ABSTRACT

Today's environment, numerical computation is more and more dependent on the computer.Many problems in the large-scale scientific computing and engineering solution, ultimately comes down to solving large sparse system of linear equations, the solution time occupies a large proportion in the whole problem solving time, some even reached 80%.Due to the current scientific research and large projects in various complex can claim to the computing precision and computing speed is higher and higher.Therefore, the linear algebraic equations, which is the basis for large-scale scientific computing efficient numerical solution has attracted widespread attention.To solve the general iterative method is used to this kind of equations.This time I do the iteration method of two-point boundary value problem is accomplished by MATLAB.About the iteration method, there are many kinds of solution formula is: Jacobi, GS requires the given initial value, a super relaxation method is weighted average of the transformation of Gauss’Seidel and over relaxation iteration method)the error between the convergence speed and the exact solution of comparative research.Key words: numerical calculation iterative method three kinds of formula

基于java實(shí)現(xiàn)電子時(shí)鐘

目 錄 課程目的與要求……………………………………………………………………………1 1、1課程目標(biāo)……………………………………………………………………………1 1、2 課程的實(shí)現(xiàn)環(huán)境……………………………………………………………………1 2 概要設(shè)計(jì)……………………………………………………………………………………2 3 詳細(xì)設(shè)計(jì)……………………………………………………………………………………5 4 測(cè)試結(jié)果與心得體會(huì)………………………………………………………………………8 5 參考文獻(xiàn)…………………………………………………………………………………15 附錄…………………………………………………………………………………………16 源程序代碼…………………………………………………………………………………16

基于java實(shí)現(xiàn)電子時(shí)鐘 課程的目的與要求 1、1課程目標(biāo)

利用我們所學(xué)的數(shù)值分析的迭代法知識(shí)對(duì)線性方程組的問(wèn)題進(jìn)行求解,同時(shí)把迭代法的求解過(guò)程用MATLAB程序語(yǔ)言實(shí)現(xiàn)其算法功能。

對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行記錄,對(duì)比與分析最后得出結(jié)論。1、2課程的實(shí)現(xiàn)環(huán)境

硬件要求能運(yùn)行Windows 9.X操作系統(tǒng)的微機(jī)系統(tǒng)、Matlab軟件。

基于java實(shí)現(xiàn)電子時(shí)鐘

Eps=0.1 結(jié)果:

迭代次數(shù)k:4394 結(jié)果與精確解的比較圖(綠色粗線是精確解,黑色細(xì)線是迭代結(jié)果)

共 23 頁(yè) 第 11 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

Eps=0.01 結(jié)果:

迭代次數(shù)k:379 結(jié)果與精確解的比較圖(綠色粗線是精確解,黑色細(xì)線是迭代結(jié)果)

超松弛法:代碼見(jiàn)附錄 Eps=1 w=1.56

共 23 頁(yè) 第 12 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

結(jié)果:

迭代次數(shù)k:3503 結(jié)果與精確解的比較圖(綠色粗線是精確解,黑色細(xì)線是迭代結(jié)果)

Eps=0.1 w=1.56 結(jié)果:

迭代次數(shù)k:1369 結(jié)果與精確解的比較圖(綠色粗線是精確解,黑色細(xì)線是迭代結(jié)果)

共 23 頁(yè) 第 13 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

Eps=0.01 w=1.56 結(jié)果:

迭代次數(shù)k:131 結(jié)果與精確解的比較圖(綠色粗線是精確解,黑色細(xì)線是迭代結(jié)果)4、2三種方法的比較

共 23 頁(yè) 第 14 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

Jacobi、G-S、超松弛法,三者都能夠取得對(duì)精確解的良好逼近,但是,在相同的精度條件下,三者的收斂速度是不一樣的,jacobi

本次數(shù)值方法的題目是迭代法求兩點(diǎn)邊值問(wèn)題。首先回去溫習(xí)了數(shù)值方法的理論知識(shí),把迭代法的原理弄清楚了,請(qǐng)教老師,上網(wǎng)查資料,忙的不亦樂(lè)乎。在設(shè)計(jì)的過(guò)程中我遇到的很多問(wèn)題,在老師的幫助和自己的思考下還是很好的完成了。

事情就是如此,努力代表收獲。這次課程設(shè)計(jì),平時(shí)感覺(jué)挺簡(jiǎn)單的那些枯燥單調(diào)的代碼和數(shù)學(xué)公式,真正到了自己運(yùn)用的時(shí)候卻無(wú)從下手,但是,解決問(wèn)題的過(guò)程恰是不斷學(xué)習(xí)的過(guò)程:數(shù)學(xué)算法轉(zhuǎn)換為代碼的過(guò)程要對(duì)題目有深入的了解,然后對(duì)程序函數(shù)定義還要有一定的掌握能力,通過(guò)這個(gè)的過(guò)程讓我鞏固了自己的數(shù)學(xué)知識(shí),對(duì)數(shù)學(xué)專(zhuān)業(yè)知識(shí)和MATLAB的操作有了更深的體會(huì)。

課程設(shè)計(jì)中遇到的問(wèn)題只憑自己苦思冥想是不能全部解決的,這是同學(xué)老師的建議和網(wǎng)絡(luò)給了我很大的幫助。遇到自己解決不了的問(wèn)題時(shí),多多向老師同學(xué)請(qǐng)教,或許問(wèn)題就能迎刃而解。另外,生在這個(gè)信息化社會(huì),互聯(lián)網(wǎng)的作用不言而喻,許多問(wèn)題只要在網(wǎng)上搜索一下就能得到令人滿(mǎn)意的解答。

參考文獻(xiàn)

[1] 王建衛(wèi).MATLAB 7.X 程序設(shè)計(jì).北京:中國(guó)水利水電出版社,2007.

[2] 李慶揚(yáng),王能超,易大義.?dāng)?shù)值分析[M] .武漢:華中科技大學(xué)出版社,2006.7. [3] 清華大學(xué)、北京大學(xué)計(jì)算方法編寫(xiě)組.計(jì)算方法[M] .北京:科學(xué)出版社,1980.

共 23 頁(yè) 第 15 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

附錄

源程序代碼:

Jacobi:

function [y,k]=jacobi2(a,eps,h,delta)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0;end end

for i=1:n-1 A(i,i)=-(2*eps+h);end

for i=1:n-1 for j=1:n-1 if i==j+1 A(i,j)=eps;end

if i==j-1 A(i,j)=eps+h;end

end end

b=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h^2;end

b(n-1,1)=a*h^2-eps-h;D=zeros(n-1);for i=1:n-1 D(i,i)=A(i,i);end

L=zeros(n-1);for i=1:n-1 for j=1:n-1 if i>j L(i,j)=-A(i,j);end

end

第 16 頁(yè)

共 23 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

end

U=zeros(n-1);for i=1:n-1 for j=1:n-1 if i

end end

B=D(L+U);g=Db;while 1 z=B*y+g;if norm(z-y,inf)

y=z;k=k+1;end

x=linspace(0,1);truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a;figure;plot(100*x,truy,'g','LineWidth',5);hold on;grid hold on;plot(y,'b')

G-S: function [y,k]=gs2(a,eps,h,delta)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0;end

共 23 頁(yè) 第 17 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

end

for i=1:n-1 A(i,i)=-(2*eps+h);end

for i=1:n-1 for j=1:n-1 if i==j+1 A(i,j)=eps;end

if i==j-1 A(i,j)=eps+h;end

end end

b=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h^2;end

b(n-1,1)=a*h^2-eps-h;D=zeros(n-1);for i=1:n-1 D(i,i)=A(i,i);end

L=zeros(n-1);for i=1:n-1 for j=1:n-1 if i>j L(i,j)=-A(i,j);end

end end

U=zeros(n-1);for i=1:n-1 for j=1:n-1 if i

end end

B=D(L+U);g=Db;while 1 z=(D-L)U*y+(D-L)b;if norm(z-y,inf)

第 18 頁(yè)

共 23 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

end

y=z;k=k+1;end

x=linspace(0,1);truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a;figure;plot(100*x,truy,'g','LineWidth',5);hold on;grid hold on;plot(y,'b')

超松弛:

function [y,k]=sor(a,eps,h,delta,w)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0;end end

for i=1:n-1 A(i,i)=-(2*eps+h);end

for i=1:n-1 for j=1:n-1 if i==j+1 A(i,j)=eps;end

if i==j-1 A(i,j)=eps+h;end

end end

b=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h^2;end

共 23 頁(yè) 第 19 頁(yè)

基于java實(shí)現(xiàn)電子時(shí)鐘

b(n-1,1)=a*h^2-eps-h;D=zeros(n-1);for i=1:n-1 D(i,i)=A(i,i);end

L=zeros(n-1);for i=1:n-1 for j=1:n-1 if i>j L(i,j)=-A(i,j);end

end end

U=zeros(n-1);for i=1:n-1 for j=1:n-1 if i

end end

B=D(L+U);g=Db;Lw=((D-w*L)^-1)*((1-w)*D+w*U);while 1 z=Lw*y+w*(D-w*L)^-1*b;if norm(z-y,inf)

y=z;k=k+1;end

x=linspace(0,1);truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a;figure;plot(100*x,truy,'g','LineWidth',5);hold on;grid hold on;plot(y,'b')

共 23 頁(yè) 第 20 頁(yè)

第二篇:兩點(diǎn)邊值問(wèn)題地有限差分法偏微分方程數(shù)值解課程實(shí)驗(yàn)報(bào)告

學(xué)

實(shí)

驗(yàn)

報(bào)

實(shí)驗(yàn)課程名稱(chēng)

偏微分方程數(shù)值解

開(kāi)課實(shí)驗(yàn)室

數(shù)統(tǒng)學(xué)院

學(xué)

數(shù)統(tǒng)

年級(jí)

2013 專(zhuān)業(yè)班

信計(jì) 2 2 班

學(xué)

學(xué)

號(hào)

開(kāi)

時(shí)

2015 至

2016 學(xué)年第2

學(xué)期

成績(jī)

教師簽名

數(shù)學(xué)與統(tǒng)計(jì)學(xué)院制

開(kāi)課學(xué)院、實(shí)驗(yàn)室:

數(shù)統(tǒng)學(xué)院

實(shí)驗(yàn)時(shí)間

:2016 年

實(shí)驗(yàn)項(xiàng)目

稱(chēng)

兩點(diǎn)邊值問(wèn)題的有限差分法

實(shí)驗(yàn)項(xiàng)目類(lèi)型

驗(yàn)證

演示

綜合設(shè)計(jì)

其他

指導(dǎo)教師

曾芳

成績(jī)

一.實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)該實(shí)驗(yàn),要求學(xué)生掌握求解兩點(diǎn)問(wèn)題的有限差分法,并能通過(guò)計(jì)算機(jī)語(yǔ)言編程實(shí)現(xiàn)。

二.實(shí)驗(yàn)容

考慮如下的初值問(wèn)題:

? ?? ?? ?? ?? ? ? ? ? ? ? ? , ,du x du x dLu p x r x q x u x f x x a bdx dx dx? ?? ? ? ? ? ?? ?? ?

(1)? ? ? ? , u a u b ? ? ? ?

(2)其中 ? ? ? ?1, p x C a b ?,? ? ? ? ? ? ? ? , , , r x q x f x C a b ?,? ?min0 p x p ? ?,? ? 0 q x ?,, ? ? 是給定常數(shù)。

將區(qū)間 N 等分,設(shè)b ahN??,網(wǎng)點(diǎn) , 0,1,...,ix a ih i N ? ? ?。

1.在第三部分寫(xiě)出問(wèn)題(1)和(2)的差分格式,并給出該格式的局部截?cái)嗾`差。

2.根據(jù)你寫(xiě)出的差分格式,編寫(xiě)一個(gè)有限差分法程序。將所寫(xiě)程序放到第四部分。

3.給定參數(shù) 0, 1 a b ? ?,3, 1, 2 p r q ? ? ?,0 ? ?,1 ? ?,問(wèn)題(1)的精確解 ? ?2 1 ??xu x x e,其 中 將 ? ?2 1 ??xu x x e 及 1, 2, 3 ? ? ? p r q 帶 入 方 程(1)可 得 ? ? f x。

分 別 取10,20,40,80,160 N ?,用所編寫(xiě)的程序計(jì)算問(wèn)題(1)和(2)。將數(shù)值解記為iu,1,..., 1 i N ? ?,網(wǎng)點(diǎn)處精確解記為 ? ? i u,1,..., 1 i N ? ?。然后計(jì)算相應(yīng)的誤差

? ?0maxNiici Ne u u? ?? ?,? ?1201NNiiie h u u??? ??及收斂階? ?2lnln2N Ne e,將計(jì)算結(jié)果填入第五部分的表格,并對(duì)表格中的結(jié)果進(jìn)行解釋?zhuān)?4.將數(shù)值解和精確解畫(huà)圖顯示,每種網(wǎng)格上的解畫(huà)在一圖。

三.實(shí)驗(yàn)原理、方法(算法)、步驟

1.差分格式:

錯(cuò)誤!未找到引用源。= =--1/h^2(錯(cuò)誤!未找到引用源。--((錯(cuò)誤!未找到引用源。))錯(cuò)誤!未找到引用源。+ +錯(cuò)誤!未找到引用源。)+錯(cuò)誤!未找到引用源。((錯(cuò)誤!未找到引用源。)/2h+錯(cuò)誤!未找到引用源。= =錯(cuò)誤!未找到引用源。

錯(cuò)誤!未找到引用源。

A,錯(cuò)誤!未找到引用源。

2.局部階段誤差:

錯(cuò)誤!未找到引用源。

(u)=O(h^2)

3.程序

clear all

N=10;

a=0;b=1;

p=(x)1;

r=(x)2;

q=(x)3;

alpha=0;beta=1;

f=(x)(4*x^2-2)*exp(x-1);

h=(b-a)/N;

H=zeros(N-1,N-1);g=zeros(N-1,1);%

for i=1

H(i,i)=2*(p(a+(i+1/2)*h)+p(a+(i-1/2)*h))/h+2*h*q(a+i*h);

H(i,i+1)=-(2*p(a+(i+1/2)*h)/h-r(a+i*h));

g(i)=2*h*f(a+i*h)+(2*p(a+(i-1/2)*h)/h+r(a+i*h))*alpha;

end

for i=2:N-2

H(i,i-1)=-(2*p(a+(i-1/2)*h)/h+r(a+i*h));

H(i,i)=2*(p(a+(i+1/2)*h)+p(a+(i-1/2)*h))/h+2*h*q(a+i*h);

H(i,i+1)=-(2*p(a+(i+1/2)*h)/h-r(a+i*h));

g(i)=2*h*f(a+i*h);

end

for i=N-1

H(i,i-1)=-(2*p(a+(i-1/2)*h)/h+r(a+i*h));

H(i,i)=2*(p(a+(i+1/2)*h)+p(a+(i-1/2)*h))/h+2*h*q(a+i*h);

g(i)=2*h*f(a+i*h)+(2*p(a+(i+1/2)*h)/h-r(a+i*h))*beta;

end

u=Hg;

u=[alpha;u;beta];

x=a:h:b;

y=(x.^2).*exp(x-1);

plot(x,u);

hold on

plot(x,y);

y=y"

z=y-u

四.實(shí)驗(yàn)環(huán)境(所用軟件、硬件等)及實(shí)驗(yàn)數(shù)據(jù)文件

Matlab

五.實(shí)驗(yàn)結(jié)果及實(shí)例分析

N Nce

收斂階 0Ne

收斂階 10 0.00104256 …… 0.00073524 …… 20 0.00026168 1.9341 0.00018348 1.4530 40 0.00006541 2.0001 0.00004585 2.0000 80 0.00001636 1.9993 0.00001146 2.0000 160 0.00000409 2.0000 0.00000287 2.0000

N N 越大

只會(huì)使絕對(duì)誤差變小,方法沒(méi)變,所以收斂階一致。

圖示為:((綠線為解析解,藍(lán)線為計(jì)算解))

N=10

N=20

N=40

N=80

N=160

教師簽名

****年**月**日

第三篇:某水電站繼電保護(hù)課程設(shè)計(jì)分解

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū) 引 言

1.1 摘要

由于大型水電站的母線、發(fā)電機(jī)和變壓器的結(jié)構(gòu)比較復(fù)雜,在運(yùn)行過(guò)程中都可能會(huì)發(fā)生各種各樣的故障和異常運(yùn)行狀態(tài),為了確保在保護(hù)范圍內(nèi)發(fā)生故障,都能有選擇性的快速切除故障,需要配置多種繼電保護(hù)裝置,必要時(shí)進(jìn)行多重化配置,從而將水電站中重要設(shè)備的危害和損失降到最小,對(duì)電力系統(tǒng)的影響最小。

發(fā)電機(jī)是電力系統(tǒng)中的中的一個(gè)重要組成部件,發(fā)電機(jī)的安全運(yùn)行對(duì)保證電力系統(tǒng)的正常工作和電能質(zhì)量起著決定性的作用。所以,繼電保護(hù)裝置對(duì)大型水電站的正常運(yùn)行起著至關(guān)重要的作用。

通過(guò)本課程設(shè)計(jì),使學(xué)生掌握和應(yīng)用電力系統(tǒng)繼電保護(hù)的設(shè)計(jì)、整定計(jì)算、資料整理查詢(xún)和電氣繪圖等使用方法。在此過(guò)程中培養(yǎng)學(xué)生對(duì)各門(mén)專(zhuān)業(yè)課程整體觀的綜合能力,通過(guò)較為完整的工程實(shí)踐基本訓(xùn)練,為全面提高學(xué)生的綜合素質(zhì)及增強(qiáng)工作適應(yīng)能力打下一定的基礎(chǔ)。本課程主要設(shè)計(jì)發(fā)電機(jī)繼電保護(hù)的原理、配置及整定計(jì)算,給今后繼電保護(hù)的工作打下良好的基礎(chǔ)。1.2 原始資料

某水電站(如下圖 1)所示:

圖 1 水電站系統(tǒng)圖

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū) 發(fā)電機(jī)繼電保護(hù)

在電力系統(tǒng)中,發(fā)電機(jī)是一個(gè)尤其重要的電器元件,決定著電力系統(tǒng)的正常工作與電能質(zhì)量。同時(shí),發(fā)電機(jī)本身價(jià)格昂貴,因此,必須裝設(shè)性能完善的繼電保護(hù)裝置,用于針對(duì)發(fā)電機(jī)各種故障和不正常運(yùn)行狀態(tài)。4.1 故障分析 4.1.1故障類(lèi)型

(1)定子繞組相間短路:危害最大;

(2)定子繞組一相的匝間短路:可能演變?yōu)閱蜗嘟拥囟搪泛拖嚅g短路;(3)定子繞組單相接地:較常見(jiàn),燒壞鐵芯或造成局部融化;(4)轉(zhuǎn)子繞組一點(diǎn)接地或兩點(diǎn)接地:一點(diǎn)接地時(shí)危害不嚴(yán)重;兩點(diǎn)接地時(shí),因破壞了轉(zhuǎn)子磁通的平衡,可能引起發(fā)電機(jī)的強(qiáng)烈震動(dòng)或燒損轉(zhuǎn)子繞組;

(5)轉(zhuǎn)子勵(lì)磁回路勵(lì)磁電流急劇下降或消失:從系統(tǒng)吸收無(wú)功功率,造成失步,從而引起系統(tǒng)電壓下降,甚至可使系統(tǒng)崩潰。4.1.2不正常運(yùn)行狀態(tài)

(1)外部短路引起的定子繞組過(guò)電流:溫度升高,絕緣老化;

(2)負(fù)荷等超過(guò)發(fā)電機(jī)額定容量而引起的三相對(duì)稱(chēng)過(guò)負(fù)荷:溫度升高,絕緣老化;

(3)外部不對(duì)稱(chēng)短路或不對(duì)稱(chēng)負(fù)荷而引起的發(fā)電機(jī)負(fù)序過(guò)電流和過(guò)負(fù)荷:在轉(zhuǎn)子中感應(yīng)出100Hz的倍頻電流,可使轉(zhuǎn)子局部灼傷或使護(hù)環(huán)受熱松脫,對(duì)發(fā)電機(jī)造成重大損害。

(4)突然甩負(fù)荷引起的定子繞組過(guò)電壓:調(diào)速系統(tǒng)慣性較大發(fā)電機(jī),在突然甩負(fù)荷時(shí),可能出現(xiàn)過(guò)電壓,造成發(fā)電機(jī)繞組絕緣擊穿。

(5)勵(lì)磁回路故障或強(qiáng)勵(lì)時(shí)間過(guò)長(zhǎng)而引起的轉(zhuǎn)子繞組過(guò)負(fù)荷;(6)汽輪機(jī)主氣門(mén)突然關(guān)閉而引起的發(fā)電機(jī)逆功率:發(fā)電機(jī)不發(fā)出有功功率而從系統(tǒng)中吸收有功功率,造成發(fā)電機(jī)轉(zhuǎn)為電動(dòng)機(jī)運(yùn)行,原因調(diào)速控制回路故障、機(jī)爐保護(hù)動(dòng)作或某些認(rèn)為因素。

第 9 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

4.1.3保護(hù)類(lèi)型

1.發(fā)電機(jī)縱差動(dòng)保護(hù):定子繞組及其引出線的相間短路保護(hù);

2.橫差動(dòng)保護(hù):定子繞組一相匝間短路的保護(hù);

3.單相接地保護(hù):對(duì)發(fā)電機(jī)定子繞組單相接地短路的保護(hù);

4.發(fā)電機(jī)的失磁保護(hù):針對(duì)轉(zhuǎn)子勵(lì)磁回路勵(lì)磁電流急劇下降或消失設(shè)置的保護(hù);

5.過(guò)電流保護(hù):反應(yīng)外部短路引起的過(guò)電流,同時(shí)作為縱差動(dòng)保護(hù)的后備保護(hù);

6.負(fù)序電流保護(hù):反應(yīng)不對(duì)稱(chēng)短路或三相負(fù)荷不對(duì)稱(chēng)時(shí),發(fā)電機(jī)定子繞組中出現(xiàn)的負(fù)序電流;

7.過(guò)負(fù)荷保護(hù):發(fā)電機(jī)長(zhǎng)時(shí)間超負(fù)荷運(yùn)行時(shí),作用于信號(hào)的保護(hù); 8.過(guò)電壓保護(hù):反應(yīng)突然甩負(fù)荷而出現(xiàn)的過(guò)電壓; 9.轉(zhuǎn)子一點(diǎn)接地保護(hù)和兩點(diǎn)接地保護(hù):勵(lì)磁回路的接地故障保護(hù); 10.轉(zhuǎn)子過(guò)負(fù)荷保護(hù);

11.逆功率保護(hù):汽輪機(jī)主汽門(mén)誤關(guān)閉同時(shí)發(fā)電機(jī)出口斷路器未跳閘,發(fā)電機(jī)失去原動(dòng)力,從發(fā)電機(jī)運(yùn)行轉(zhuǎn)為電動(dòng)機(jī)運(yùn)行,從電力系統(tǒng)中吸收有功功率。危害:汽輪機(jī)尾部葉片有可能過(guò)熱而造成事故。

本發(fā)電廠發(fā)電機(jī)保護(hù)裝置的設(shè)置可依據(jù)以上原則并結(jié)合小型水電站情況進(jìn)行,對(duì)發(fā)電機(jī)發(fā)電機(jī)比率制動(dòng)式縱差保護(hù)和定子匝間短路保護(hù)進(jìn)行整定計(jì)算。4.2 發(fā)電機(jī)比率制動(dòng)式縱差保護(hù)(主保護(hù))原理及其整定計(jì)算 4.2.1 比率制動(dòng)式差動(dòng)保護(hù)原理

比率制動(dòng)式縱差保護(hù)僅反應(yīng)相間短路故障。具有比率制動(dòng)特性的差動(dòng)保護(hù)的二次接線如圖1.2所示。圖中,KVI串接于三相電流互感器的中性線上,反應(yīng)中性線上的電流大小,作為差動(dòng)保護(hù)TA斷線監(jiān)視用,延時(shí)發(fā)信號(hào)。

當(dāng)差動(dòng)線圈匝數(shù)Wd與制動(dòng)線圈匝數(shù)Wres的關(guān)系為Wres=1/2Wd時(shí),第 10 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

it1?iId,橫坐標(biāo)為制動(dòng)電流Ires。

為了正確進(jìn)行整定計(jì)算,首先應(yīng)了解縱差保護(hù)的不平衡電流與負(fù)荷電流和外部短路電流間的關(guān)系。

第 11 頁(yè)

共 17 頁(yè) n1?

圖1.2具有比率制動(dòng)特性的差動(dòng)保護(hù)的二次接線 差動(dòng)電流:

制動(dòng)電流:

比率制動(dòng)式差動(dòng)保護(hù)的動(dòng)作方程為:

Id?K(Ires?Ires.min)?Id.min,Ires?Ires.min

Id?Id.min,Ires?Ires.min 式中:,—— 一次電流;

,—— 二次電流;

na —— 電流互感器變比。Id—— 差動(dòng)電流或稱(chēng)動(dòng)作電流 Ires—— 制動(dòng)電流 Ires.min—— 拐點(diǎn)電流

Id.min——啟動(dòng)電流 K—— 制動(dòng)斜率

差動(dòng)保護(hù)的制動(dòng)特性如圖1.2.1中的折線ABC所示。圖中,縱坐標(biāo)為差動(dòng)電流

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

發(fā)電機(jī)縱差保護(hù)用的10P級(jí)電流互感器,在額定一次電流和額定二次負(fù)荷條件下的比誤差為±3%。因此,縱差保護(hù)在正常負(fù)荷狀態(tài)下的最大不平衡電流不大于6%。但隨著外部短路電流的增大和非周期暫態(tài)電流的影響,電流互感器飽和,不平衡電流將急劇增大,實(shí)際的不平衡電流與短路電流的關(guān)系曲線如圖1.2.1中的曲線OED所示。

根據(jù)比率式制動(dòng)特性曲線分析。當(dāng)發(fā)電機(jī)正常運(yùn)行時(shí),或區(qū)外較遠(yuǎn)的地方發(fā)生短路時(shí),差動(dòng)電流接近為零,差動(dòng)保護(hù)不會(huì)誤動(dòng)。發(fā)電機(jī)內(nèi)部發(fā)生短路故障時(shí),差動(dòng)電流明顯增大,圖1.4 比率制動(dòng)式差動(dòng)保護(hù)的制動(dòng)特性

I1和I2 相位接近相同,減小了制動(dòng)量,從而可靈敏動(dòng)作。當(dāng)發(fā)生發(fā)電機(jī)內(nèi)部??輕微故障時(shí),雖然有負(fù)荷電流制動(dòng),但制動(dòng)電流比較小,保護(hù)一般也能可靠動(dòng)作。4.2.2 比率制動(dòng)式差動(dòng)保護(hù)的整定計(jì)算

1、啟動(dòng)電流Id.min的整定:

Id.min?Krel(Ier1?Ier2)

式中Krel——可靠系數(shù),取1.5 ~ 2 Ier1——保護(hù)兩側(cè)的TA變比誤差產(chǎn)生的差流,取0.06Ign(Ign為發(fā)電機(jī)額定電流);

Ier2——保護(hù)兩側(cè)的二次電流誤差(包括二次回路引線差異以及縱差動(dòng)保護(hù)輸入通道變換系數(shù)調(diào)整不一致)產(chǎn)生的差流,取0.1Ign。

所以:Id.min?(0.24~0.32)Ign,通常取0.3Ign。

第 12 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

所以: Id.min?0.3Ign=0.3*4.23=1.269(A)

2、拐點(diǎn)電流Ires.min的整定:

Ires.min?(0.5~1.0)Ign?(2.115~4.3)A

3、比率制動(dòng)特性的制動(dòng)系數(shù)Kres和制動(dòng)斜率K的整定。

發(fā)電機(jī)縱差動(dòng)保護(hù)比率制動(dòng)特性的制動(dòng)斜率K,決定于夾角?。可以看出,當(dāng)拐點(diǎn)電流確定后,夾角?決定于C點(diǎn)。而特性曲線上的C點(diǎn)又可近似由發(fā)電機(jī)外部故障時(shí)最大短路電流Ik.max與差動(dòng)回路中的最大不平衡電流Iunb.max確定。由此制動(dòng)系數(shù)Kres可以表示為:

Kres?Iunb.max Ik.max而制動(dòng)線斜率K則可表示為: K?Iunb.max?Id.min

Ik.max?Ires.min差動(dòng)回路中的最大不平衡電流,除與縱差動(dòng)保護(hù)用兩側(cè)TA的10%誤差、二次回路參數(shù)差異及差動(dòng)保護(hù)測(cè)量誤差有關(guān)外,尚與縱差動(dòng)保護(hù)兩側(cè)TA暫態(tài)特性有關(guān)。因此故障時(shí),為躲開(kāi)最大不平衡電流,C點(diǎn)電流應(yīng)取為:

Id.max?Krel(0.1?0.1?Kf)Ik.max 式中 Krel——可靠系數(shù),取1.3 ~ 1.5;

Kf——暫態(tài)特性系數(shù),相同時(shí)取0,不同時(shí)取0.05~0.1;

Id.max——最大動(dòng)作電流。

于是可得Id.max?(0.26~0.45)Ik.max。令I(lǐng)d.m可得Kres?(0.26~0.45)。xa=Iunb.max,Kres可取0.3;Kres因此,對(duì)于發(fā)電機(jī)完全縱差動(dòng)保護(hù),而對(duì)不完全縱差動(dòng)保護(hù),可取0.3~0.4。而對(duì)制動(dòng)斜率K可以根據(jù)公式K?Iunb.max?Id.min求得。

Ik.max?Ires.min第 13 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

4.3 發(fā)電機(jī)定子匝間短路保護(hù)(橫差保護(hù))原理及整定計(jì)算

發(fā)電機(jī)定子匝間短路保護(hù)原理,主要有發(fā)電機(jī)縱向零序過(guò)電壓及故障分量負(fù)序方向型匝間保護(hù),不僅作為發(fā)電機(jī)內(nèi)部匝間短路的主保護(hù),還可作為發(fā)電機(jī)內(nèi)部相間短路及定子繞組開(kāi)焊的保護(hù);故障分量負(fù)序方向(ΔP2)保護(hù)應(yīng)裝在發(fā)電機(jī)端,不僅可作為發(fā)電機(jī)內(nèi)部匝間短路的主保護(hù),還可作為發(fā)電機(jī)內(nèi)部相間短路及定子繞組開(kāi)焊的保護(hù);高靈敏零序電流型橫差保護(hù),作為發(fā)電機(jī)內(nèi)部匝間、相間短路及定子繞組開(kāi)焊的主保護(hù)。

發(fā)電機(jī)橫差保護(hù),是發(fā)電機(jī)定子繞組匝間短路(同分支匝間短路及同相不同分支之間的匝間短路)、線棒開(kāi)焊的主保護(hù),也能保護(hù)定子繞組相間短路。

單元件橫差保護(hù),適用于每相定子繞組為多分支,且有兩個(gè)或兩個(gè)以上中性點(diǎn)引出的發(fā)電機(jī)。

發(fā)電機(jī)單元件橫差保護(hù)的輸入電流,為發(fā)電機(jī)兩個(gè)中性點(diǎn)連線上的TA 二次電流。以定子繞組每相兩分支的發(fā)電機(jī)為例,其交流輸入回路示意圖如下所示:

理想發(fā)電機(jī)正常時(shí)中性點(diǎn)連線上不會(huì)有電流產(chǎn)生,實(shí)際上發(fā)電機(jī)不同中性點(diǎn)之間從在不平衡電流,原因如下:(1)定子同向而不同分支的繞組參數(shù)不完全相同,致使兩端的電動(dòng)勢(shì)及支路電流有差異。

(2)發(fā)電機(jī)定子氣息磁場(chǎng)不完全均勻,在不同定子繞組中產(chǎn)生的感應(yīng)電動(dòng)勢(shì)不同。

(3)轉(zhuǎn)自偏心,在不同的定子繞組中產(chǎn)生不同電動(dòng)勢(shì)。(4)存在三次諧波。

因此單原件縱差保護(hù)動(dòng)作電流必須克服這些不平衡,整定式為:

第 14 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

Iset?(0.25?0.31)IgN

Iunb1 額定工況下,同相不同分支繞組由于繞組之間參數(shù)的差異產(chǎn)生的不平衡電流,由于是三相之和,一般可取5?IgN

Iunb2 磁場(chǎng)氣隙不平衡產(chǎn)生的不平衡電流,一般可取10?IgN Iunb3 轉(zhuǎn)自偏心產(chǎn)生的不平衡電流,一般取10?IgN Krel 可靠系數(shù),取1.2—1.5 把各系數(shù)代入得Iset?(0.25?0.31)IgN ?(1.0575?1.3113)A 4.4 勵(lì)磁回路兩點(diǎn)接地保護(hù)

當(dāng)發(fā)電機(jī)勵(lì)磁回路發(fā)生兩點(diǎn)接地故障時(shí),部分勵(lì)磁線圈將被短路,由此由于氣隙磁勢(shì)的對(duì)稱(chēng)性遭到破壞,可能使轉(zhuǎn)子產(chǎn)生劇烈振動(dòng),因此在發(fā)電機(jī)上需要裝設(shè)勵(lì)磁回路兩點(diǎn)接地保護(hù),該裝置只設(shè)一套,并僅在勵(lì)磁回路中出現(xiàn)穩(wěn)定性的一點(diǎn)接地時(shí)才投入工作。4.5 過(guò)負(fù)荷保護(hù)整定

過(guò)負(fù)荷保護(hù)是動(dòng)作于信號(hào)的保護(hù),考慮到過(guò)負(fù)荷對(duì)稱(chēng)性,該保護(hù)只有一相中裝設(shè),并與過(guò)電流保護(hù)共用一組互感器,保護(hù)由電流繼電器及時(shí)間繼電器組成。

電流繼電器動(dòng)作值按照下式計(jì)算: Idz.j?KkINf1.05?507.94?=5.22A Khnl0.85?120Kk

可靠系數(shù),取=1.05;

Kh

返回系數(shù),取=0.85; Inf

發(fā)電機(jī)額定電流;

nl

電流互感器變比;

過(guò)負(fù)荷保護(hù)動(dòng)作時(shí)限比過(guò)電流保護(hù)長(zhǎng),一般為9~10s.第 15 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

結(jié)

語(yǔ)

本次課程設(shè)計(jì)主要針對(duì)某水電站電力系統(tǒng)對(duì)其進(jìn)行短路電流的計(jì)算,對(duì)發(fā)電機(jī)繼電保護(hù)進(jìn)行設(shè)計(jì)。在這些設(shè)計(jì)過(guò)程中需要用到各種電力工程設(shè)計(jì)手冊(cè),并且借用AutoCAD輔助工具畫(huà)出其各類(lèi)電氣接線圖。

在完成本次課程設(shè)計(jì)的過(guò)程中,運(yùn)用了大量的專(zhuān)業(yè)知識(shí),也進(jìn)行了大量的計(jì)算。而在此過(guò)程中也將自己專(zhuān)業(yè)知識(shí)不扎實(shí),計(jì)算能力不強(qiáng)的缺點(diǎn)暴露無(wú)遺。在完成課設(shè)期間得到了同學(xué)的大力幫助,在此衷心的表示感謝。通過(guò)對(duì)該小型水電站電氣部分繼電保護(hù)的設(shè)計(jì),使我對(duì)繼電保護(hù)系統(tǒng)有了進(jìn)一步的掌握,在此過(guò)程中,使我了解并一定程度掌握了專(zhuān)業(yè)知識(shí)在實(shí)際工程中的應(yīng)用,通過(guò)該設(shè)計(jì)也使我學(xué)會(huì)了在電氣設(shè)計(jì)中如何正確的查詢(xún)相關(guān)規(guī)程規(guī)范。

第 16 頁(yè)

共 17 頁(yè)

電力系統(tǒng)繼電保護(hù)課程設(shè)計(jì)說(shuō)明書(shū)

參 考 文 獻(xiàn)

[1]水利電力部東北電力設(shè)計(jì)院 編,電力工程設(shè)計(jì)手冊(cè),上海:上海科學(xué)技術(shù)出版社,1981年9月

[2]卓樂(lè)友 編,電力工程電氣設(shè)計(jì)手冊(cè)電氣二次部分,北京:水利電力出版社1990年9月

[3]水利電力部華東電力設(shè)計(jì)院 主編,電力工程概算指標(biāo),北京:水利電力出版社,1987年8月

[4]孟祥萍 高燕 編,電力系統(tǒng)分析,北京:高等教育出版社,2004年2月

[5]何永華 主編,發(fā)電廠及變電站的二次回路,北京:中國(guó)電力出版社,2004年3月

[6]商國(guó)才 編,電力系統(tǒng)自動(dòng)化,天津:天津大學(xué)出版社,1999年6月

[7]孫國(guó)凱 霍利民 柴玉華 主編,電力系統(tǒng)繼電保護(hù)原理,北京:中國(guó)水利水電出版社,2002年1月

[8]熊信銀 張支涵 主編,電力系統(tǒng)工程基礎(chǔ),武漢:華中科技大學(xué)出版社,1997年

第 17 頁(yè)

共 17 頁(yè)

第四篇:通信原理課程設(shè)計(jì)詳細(xì)步驟分解09

通信原理課程設(shè)計(jì)詳細(xì)步驟分解

一、語(yǔ)音信號(hào)頻帶傳輸通信系統(tǒng)仿真

1、調(diào)用模塊產(chǎn)生模擬正弦信號(hào);調(diào)出示波器觀察是否符合要求。

2、對(duì)模擬信號(hào)進(jìn)行采樣、量化、編碼,PCM或DPCM編碼;用示波器觀察中間過(guò)程。

3、將編碼后的信號(hào)與載波相乘得到ASK已調(diào)信號(hào),或控制壓控振蕩器產(chǎn)生FSK信號(hào),或者變?yōu)殡p極性信號(hào)后再與載波相乘得到PSK,或者先差分編碼再與載波相乘得到DPSK信號(hào);用示波器觀察中間過(guò)程。

4、對(duì)信號(hào)進(jìn)行相干解調(diào),將他們與原載波信號(hào)進(jìn)行乘法后再低通濾波即可;

5、解調(diào)后的信號(hào)再進(jìn)行PCM或DPCM解碼,還原出原信號(hào)(做出此步論文合格即可及格);用示波器觀察中間過(guò)程。

6、成功后再在信道中加入高斯白噪聲,用示波器觀察中間過(guò)程(做出此步論文合格即可達(dá)到中);

7、成功后再把信源改成自己錄入的語(yǔ)音信號(hào)。用示波器觀察中間過(guò)程。(做出此步論文合格可以達(dá)到良或優(yōu))。

二、語(yǔ)音信號(hào)基帶傳輸通信系統(tǒng)仿真

1、調(diào)用模塊產(chǎn)生模擬正弦信號(hào);用示波器觀察中間過(guò)程

2、對(duì)模擬信號(hào)進(jìn)行采樣、量化、編碼,PCM或DPCM編碼;用示波器觀察中間過(guò)程。

3、將編碼后的信號(hào)調(diào)用通信模塊庫(kù)中的模塊再進(jìn)行糾錯(cuò)編碼;用示波器觀察中間過(guò)程。

4、對(duì)信號(hào)通過(guò)二進(jìn)制對(duì)稱(chēng)信道;用示波器觀察中間過(guò)程。

5、再進(jìn)行糾錯(cuò)解碼;用示波器觀察中間過(guò)程。

6、解碼后的信號(hào)再進(jìn)行PCM或DPCM解碼,還原出原信號(hào)(做出此步論文合格即可及格);

7、改變信道誤碼率,計(jì)算解碼后的誤碼率,并繪制誤碼率曲線(做出此步論文合格即可達(dá)到中);

8、成功后再把信號(hào)源改成自己錄入的語(yǔ)音信號(hào)(做出此步論文合格可以達(dá)到良或以上)。

三、CDMA直接擴(kuò)頻通信系統(tǒng)仿真

1、調(diào)用模塊產(chǎn)生隨機(jī)分布的二進(jìn)制信號(hào),轉(zhuǎn)換為雙極性;調(diào)出示波器觀察是否符合要求。并觀察其功率譜密度。

2、調(diào)用模塊產(chǎn)生題目要求的擴(kuò)頻碼,轉(zhuǎn)換為雙極性;用示波器觀察中間過(guò)程。注意擴(kuò)頻碼的頻率應(yīng)為信源頻率的整數(shù)倍。

3、將二進(jìn)制信號(hào)與擴(kuò)頻碼相乘得到已擴(kuò)信號(hào),再與高頻載波相乘得到擴(kuò)頻已調(diào)信號(hào);用示波器觀察中間過(guò)程。并觀察功率譜密度。

4、對(duì)信號(hào)進(jìn)行相干解調(diào),將他們與原載波信號(hào)進(jìn)行乘法后再低通濾波即可;注意用示波器觀察輸出,尤其需要觀察濾波引起的時(shí)延。

5、解調(diào)后的信號(hào)再與原擴(kuò)頻碼相乘進(jìn)行解擴(kuò),還原出原信號(hào)(做出此步論文合格即可及格);用示波器觀察中間過(guò)程。并觀察功率譜密度

6、成功后再在信道中加入高斯白噪聲,用示波器觀察中間過(guò)程(做出此步論文合格即可達(dá)到中);

7、成功后再把信源改成自己錄入的語(yǔ)音信號(hào),修改對(duì)應(yīng)參數(shù)。用示波器觀察中間過(guò)程。(做出此步論文合格可以達(dá)到良或優(yōu))。

第五篇:計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì) 圖形繪制變換分解

計(jì)算機(jī)圖形學(xué) 實(shí)驗(yàn)報(bào)告

課程名稱(chēng) : 計(jì)算機(jī)圖形學(xué) 實(shí)驗(yàn)名稱(chēng) : 圖形繪制與變換 學(xué) 院 : 電子信息工程學(xué)院 專(zhuān) 業(yè) : 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) : 11計(jì)科本 01班 學(xué) 號(hào) : 111102020103 姓 名 : 張慧 指導(dǎo)教師 : 王征風(fēng)

二零一四年

目錄

一、引言----------------3

二、設(shè)計(jì)需求---------3

2.1 設(shè)計(jì)目標(biāo)--3 2.2 設(shè)計(jì)環(huán)境--3

2.2.1 VC++6.0------------------------3 2.2.2 MFC------------------------------4 2.3 設(shè)計(jì)題目及要求----------------------4 2.4 總體流程圖----------------------------4

三、課程設(shè)計(jì)原理---5

3.1 實(shí)現(xiàn)的算法------------------------------5

3.1.2 Bresenham算法畫(huà)直線------5 3.1.3 中心點(diǎn)算法畫(huà)圓和橢圓------5 3.2 圖形變換的基本原理------------------7

3.2.1平移變換------------------------7 3.2.2 旋轉(zhuǎn)變換----------------------8 3.2.3 比例變換----------------------8

四、總體設(shè)計(jì)與功能實(shí)現(xiàn)-------------------------8

4.1 主要界面設(shè)計(jì)---------------------------8 4.2 設(shè)置顏色界面---------------------------8

4.2.1 界面設(shè)置代碼------------------8 4.2.2 運(yùn)行結(jié)果------------------------9 4.3 二維線畫(huà)圖元實(shí)現(xiàn)---------------------9 4.4 畫(huà)多邊形功能的實(shí)現(xiàn)--------------13 4.5 畫(huà)Bezier曲線功能的實(shí)現(xiàn)-------14 4.6 二維圖形變換的實(shí)現(xiàn)--------------16 4.7 三維圖形的變換--------------------17

五、實(shí)驗(yàn)心得體會(huì)

一、引言

計(jì)算機(jī)圖形學(xué)(Computer Graphics,簡(jiǎn)稱(chēng)CG)是一種使用數(shù)學(xué)算法將二維或三維圖形轉(zhuǎn)化為計(jì)算機(jī)顯示器的柵格形式的科學(xué)。簡(jiǎn)單地說(shuō),計(jì)算機(jī)圖形學(xué)的主要研究?jī)?nèi)容就是研究如何在計(jì)算機(jī)中表示圖形、以及利用計(jì)算機(jī)進(jìn)行圖形的計(jì)算、處理和顯示的相關(guān)原理與算法。是計(jì)算機(jī)科學(xué)的一個(gè)分支領(lǐng)域,主要關(guān)注數(shù)字合成與操作視覺(jué)的圖形內(nèi)容。計(jì)算機(jī)圖形學(xué)研究的是應(yīng)用計(jì)算機(jī)產(chǎn)生圖像的所有工作,不管圖像是靜態(tài)的還是動(dòng)態(tài)的,可交互的還是固定的,等等。圖形API是允許程序員開(kāi)發(fā)包含交互式計(jì)算機(jī)圖形操作的應(yīng)用而不需要關(guān)注圖形操作細(xì)節(jié)或任務(wù)系統(tǒng)細(xì)節(jié)的工具集。計(jì)算機(jī)圖形學(xué)有著廣泛的應(yīng)用領(lǐng)域,包括物理、航天、電影、電視、游戲、藝術(shù)、廣告、通信、天氣預(yù)報(bào)等幾乎所有領(lǐng)域都用到了計(jì)算機(jī)圖形學(xué)的知識(shí),這些領(lǐng)域通過(guò)計(jì)算機(jī)圖形學(xué)將幾何模型生成圖像,將問(wèn)題可視化從而為各領(lǐng)域更好的服務(wù)。

計(jì)算機(jī)圖形學(xué)利用計(jì)算機(jī)產(chǎn)生讓人賞心悅目的視覺(jué)效果,必須建立描述圖形的幾何模型還有光照模型,再加上視角、顏色、紋理等屬性,再經(jīng)過(guò)模型變換、視圖變換、投影操作等,這些步驟從而實(shí)現(xiàn)一個(gè)完整的OpenGL程序效果。OpenGL是一個(gè)開(kāi)放的三維圖形軟件包,它獨(dú)立于窗口系統(tǒng)和操作系統(tǒng),以它為基礎(chǔ)開(kāi)發(fā)的應(yīng)用程序可以十分方便地在各種平臺(tái)間移植。計(jì)算機(jī)圖形學(xué)通過(guò)應(yīng)用OpenGL的功能,使得生成的圖形效果具有高度真實(shí)感。學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的重點(diǎn)是掌握OpenGL在圖形學(xué)程序中的使用方法。事實(shí)上,圖形學(xué)也把可以表示幾何場(chǎng)景的曲線曲面造型技術(shù)和實(shí)體造型技術(shù)作為其主要的研究?jī)?nèi)容。同時(shí),真實(shí)感圖形計(jì)算的結(jié)果是以數(shù)字圖像的方式提供的,計(jì)算機(jī)圖形學(xué)也就和圖像處理有著密切的關(guān)系。

通過(guò)21世紀(jì)是信息的時(shí)代,在日新月異的科技更新中相信計(jì)算機(jī)會(huì)發(fā)揮越來(lái)越重要的作用,計(jì)算機(jī)圖形學(xué)也會(huì)在更多的領(lǐng)域所應(yīng)用,雖然我國(guó)在這方面還比較薄弱,但相信會(huì)有越來(lái)越好的時(shí)候的。

二、設(shè)計(jì)需求

2.1 設(shè)計(jì)目標(biāo)

以圖形學(xué)算法為目標(biāo),深入研究。繼而策劃、設(shè)計(jì)并實(shí)現(xiàn)一個(gè)能夠表現(xiàn)計(jì)算機(jī)圖形學(xué)算法原理的或完整過(guò)程的演示系統(tǒng),并能從某些方面作出評(píng)價(jià)和改進(jìn)意見(jiàn)。通過(guò)完成一個(gè)完整程序,經(jīng)歷策劃、設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、總結(jié)和驗(yàn)收各階段,達(dá)到:鞏固和實(shí)踐計(jì)算機(jī)圖形學(xué)課程中的理論和算法;學(xué)習(xí)表現(xiàn)計(jì)算機(jī)圖形學(xué)算法的技巧;培養(yǎng)認(rèn)真學(xué)習(xí)、積極探索的精神。

2.2 設(shè)計(jì)環(huán)境

2.2.1 VC++6.0 VC++6.0是 Microsoft 公司推出的一個(gè)基于 Windows 系統(tǒng)平臺(tái)、可視化的 集成開(kāi)發(fā)環(huán)境,它的源程序按 C++語(yǔ)言的要求編寫(xiě),并加入了微軟提供的功能 強(qiáng)大的 MFC(Microsoft Foundation Class)類(lèi)庫(kù)。MFC 中封裝了大部分 Windows API 函數(shù)和 Windows 控件,它包含的功能涉及到整個(gè) Windows 操作系統(tǒng)。MFC 不僅給用戶(hù)提供了 Windows 圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng) 用程序的組件,這樣,開(kāi)發(fā)人員不必從頭設(shè)計(jì)創(chuàng)建和管理一個(gè)標(biāo)準(zhǔn) Windows 應(yīng) 用程序所需的程序,而是從一個(gè)比較高的起點(diǎn)編程,故節(jié)省了大量的時(shí)間。另 外,它提供了大量的代碼,指導(dǎo)用戶(hù)編程時(shí)實(shí)現(xiàn)某些技術(shù)和功能。因此,使用VC++提供的 高度可視化的應(yīng)用程序開(kāi)發(fā)工具和 MFC 類(lèi)庫(kù),可使應(yīng)用程序開(kāi)發(fā)變 得簡(jiǎn)單。2.2.2 MFC MFC(Microsoft Foundation Classes),是 一 個(gè) 微 軟 公 司 提 供 的 類(lèi) 庫(kù)(class libraries)以 C++類(lèi)的形式封裝了 Windows 的 API,它包含了窗口等許多類(lèi)的定義。各種類(lèi)的集合構(gòu)成了一個(gè)應(yīng)運(yùn)程序的框架結(jié)構(gòu),以減少應(yīng)用程序開(kāi)發(fā)人員的工作 量。其中包含的類(lèi)包含大量 Windows 句柄封裝類(lèi)和很多 Windows 的內(nèi)建控件和組 件的封裝類(lèi)。MFC 6.0 版本封裝了大約 200 個(gè)類(lèi),其中的一些可以被用戶(hù)直接使用。例如CWnd 類(lèi)封裝了窗口的功能,包括打印文本、繪制圖形及跟蹤鼠標(biāo)指針的移動(dòng)等;CsplitterWnd 類(lèi)是從 CWnd 類(lèi)派生出來(lái)的,繼承了基類(lèi)或稱(chēng)父類(lèi) CWnd 類(lèi)的所 有特 性,但增加了自己的功能,實(shí)現(xiàn)拆分窗口,使窗口至少可被拆分成兩個(gè)窗口,用戶(hù) 可以移動(dòng)兩個(gè)窗口之間的邊框來(lái)改變窗口的大小;CtoolBar 類(lèi)可以定義工具欄等。MFC 命名的慣例是類(lèi)的名字通常是由“C”打頭;成員變量使用前綴“m_”,接著使用一個(gè)字母來(lái)指明數(shù)據(jù)類(lèi)型,然后是變量的名稱(chēng);所有的單詞用大寫(xiě)字母開(kāi)頭。

2.3 設(shè)計(jì)題目及要求

(1)題目:實(shí)現(xiàn)多邊形和曲線的繪制和變換

(2)要求:學(xué)會(huì)使用VC++編寫(xiě)實(shí)現(xiàn)圖形的繪制變換,需包括直線、曲線、多邊形的繪制和變換,及三維立體圖形的相應(yīng)變換.2.4 總體流程圖

三、課程設(shè)計(jì)原理

3.1 實(shí)現(xiàn)的算法

3.1.1 DDA算法畫(huà)直線

DDA是數(shù)字微分分析式(Digital Differential Analyzer)的縮寫(xiě)。

已知直線兩端點(diǎn)(x1,y1)、(x2,y2)則斜率m為:m =(y2-y1)/(x2-x1)= Dx/Dy;直線中的每一點(diǎn)坐標(biāo)都可以由前一點(diǎn)坐標(biāo)變化一個(gè)增量(Dx, Dy)而得到,即表示為遞歸式: xi+1=xi+Dx yi+1=yi+Dy。

遞歸式的初值為直線的起點(diǎn)(x1, y1),這樣,就可以用加法來(lái)生成一條直線。具體算法是: 該算法適合所有象限,其中用了用了兩個(gè)函數(shù)如:Integer(-8.5)=-9;Integer(8.5)=8;Sign(i),根據(jù)i的正負(fù),分別得到-1,0,+1; 相應(yīng)代碼:

//DDA DrawLine

{if(abs(x2-x1)> abs(y2-y1))

length = abs(x2-x1);

else

length = abs(y2-y1);

Dx =(x2-x1)/length;

Dy =(y2-y1)/length;

x = x1+0.5*Sign(Dx);

y = x2 + 0.5*Sign(Dy);

i = 1;

while(i <= lenght)

{ setpixel(Integer(x),Integer(y),color);

x= x + Dx;

y= y + Dy;

i+=1;} } 3.1.2 Bresenham算法畫(huà)直線

思路如下: // 假設(shè)該線段位于第一象限內(nèi)且斜率大于0小于1,設(shè)起點(diǎn)為(x1,y1),終點(diǎn)為(x2,y2).// 根據(jù)對(duì)稱(chēng)性,可推導(dǎo)至全象限內(nèi)的線段.1.畫(huà)起點(diǎn)(x1,y1).2.準(zhǔn)備畫(huà)下個(gè)點(diǎn)。x坐標(biāo)增1,判斷如果達(dá)到終點(diǎn),則完成。否則,由圖中可知,下個(gè)要畫(huà)的點(diǎn)要么為當(dāng)前點(diǎn)的右鄰接點(diǎn),要么是當(dāng)前點(diǎn)的右上鄰接點(diǎn).如果線段ax+by+c=0與x=x1+1的交點(diǎn)的y坐標(biāo)大于M點(diǎn)的y坐標(biāo)的話,下個(gè)點(diǎn)為U(x1+1,y1+1),否則,下個(gè)點(diǎn)為B(x1+1,y1),3.畫(huà)點(diǎn)(U或者B).4.跳回第2步.5.結(jié)束.3.1.3中心點(diǎn)算法畫(huà)圓和橢圓

(1)中心點(diǎn)算法畫(huà)圓

在一個(gè)方向上取單位間隔,在另一個(gè)方向的取值由兩種可能取值的中點(diǎn)離圓的遠(yuǎn)近而定。實(shí)際處理中,用決策變量的符號(hào)來(lái)確定象素點(diǎn)的選擇,因此算法效率較高。生成圓弧的中點(diǎn)算 法和上面講到的生成直線段的中點(diǎn)算法類(lèi)似。

考慮第一象限內(nèi)x?[0,R/2]的八分之一圓弧段。經(jīng)過(guò)計(jì)算,得出判別式的遞推公式為:

di?1?di?2xi?3???di?2(xi?yi)?5d?0d?0

(xi, M SE yi,r)E 這兩個(gè)遞推公式的初值條件為:

??(x0,y0,r)?(0,R)?d0?5/4?R

編寫(xiě)成員函數(shù)如下:

void CMy2_9View::MidPointEllipse(CDC *pDC, double a, double b, int color){ double x,y,d,xP,yP,squarea,squareb;

squarea=a*a;

squareb=b*b;

xP=(int)(0.5+(double)squarea/sqrt((double)(squarea+squareb)));

yP=(int)(0.5+(double)squareb/sqrt((double)(squarea+squareb)));

x=0;

y=b;

d=4*(squareb-squarea*b)+squarea;

pDC->SetPixel(x,y,color);

while(x<=xP)

{if(d<=0)d+=4*squareb*(2*x+3);

else

{d+=4*squareb*(2*x+3)-8*squarea*(y-1);

y--;}

x++;

pDC->SetPixel(x,y,color);}

x=a;

y=0;

d=4*(squarea-a*squareb)+squareb;

pDC->SetPixel(x,y,color);

while(y

{ if(d<=0)d+=4*squarea*(2*y+3);

else

{d+=4*squarea*(2*y+3)-8*squareb*(x-1);

x--;}

y++;

pDC->SetPixel(x,y,color);}} 編寫(xiě)OnDraw函數(shù)如下:

void CMy2_9View::OnDraw(CDC* pDC){CMy2_9Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);MidPointEllipse(pDC,500,300,RGB(0,0,0));}(2)中心點(diǎn)算法畫(huà)橢圓

我們先考慮圓心在原點(diǎn)的橢圓的生成,對(duì)于中心不是原點(diǎn)的橢圓,可以通過(guò)坐標(biāo)的平移變換獲得相應(yīng)位置的橢圓。中心在原點(diǎn)。焦點(diǎn)在坐標(biāo)軸上的標(biāo)準(zhǔn)橢圓具有X軸對(duì)稱(chēng)、Y軸對(duì)稱(chēng)和原點(diǎn)對(duì)稱(chēng)特性,已知橢圓上第一象限的P點(diǎn)坐標(biāo)是(x, y),則橢圓在另外三個(gè)象限的對(duì)稱(chēng)點(diǎn)分別是(x,-y)、(-x, y)和(-x,-y)。因此,只要畫(huà)出第一象限的四分之一橢圓,就可以利用這三個(gè)對(duì)稱(chēng)性得到整個(gè)橢圓。

相應(yīng)代碼:

void MP_Ellipse(int xc , int yc , int a, int b){ double sqa = a * a;double sqb = b * b;double d = sqb + sqa *(-b + 0.25);int x = 0;int y = b;EllipsePlot(xc, yc, x, y);while(sqb *(x + 1)< sqa *(y1))* 2-(a * b)* 2;while(y > 0){if(d < 0){ d += sqb *(2 * x + 2)+ sqa *(-2 * y + 3);x++;} else

{d += sqa *(-2 * y + 3);} y--;EllipsePlot(xc, yc, x, y);}} 3.2 圖形變換的基本原理

3.2.1平移變換

平移變換函數(shù)如下:

void glTranslate{fd}(TYPE x, TYPE y, TYPE z); 三個(gè)函數(shù)參數(shù)就是目標(biāo)分別沿三個(gè)軸向平移的偏移量。這個(gè)函數(shù)表示用于這三個(gè)偏移量生成的矩陣乘以當(dāng)前矩陣。當(dāng)參數(shù)是(0.0,0.0,0.0)時(shí),表示對(duì)函數(shù)glTranslate*()的操作是單位矩陣,也就是對(duì)物體沒(méi)有影響。

3.2.2 旋轉(zhuǎn)變換

旋轉(zhuǎn)變換函數(shù)如下:

Void glRota{fd}TYPE angle, TYPE x, TYPE y, TYPE z);

函數(shù)中第一個(gè)參數(shù)是表示目標(biāo)沿從點(diǎn)(x,y,z)到原點(diǎn)方向逆時(shí)針旋轉(zhuǎn)的角度,后三個(gè)參數(shù)是旋轉(zhuǎn)的方向點(diǎn)坐標(biāo)。這個(gè)函數(shù)表示用這四個(gè)參數(shù)生成的矩陣乘以當(dāng)前矩陣。當(dāng)角度參數(shù)是0.0時(shí),表示對(duì)物體沒(méi)有影響。3.2.3 比例變換

比例變換函數(shù)如下:

Void glScale{fd}(TYPE x, TYPE y, TYPE z);

單個(gè)函數(shù)參數(shù)值就是目標(biāo)分別沿三個(gè)軸方向縮放的比例因子。這個(gè)函數(shù)表示用這三個(gè)比例因子生成的矩陣乘以當(dāng)前矩陣。這個(gè)函數(shù)能完成沿相應(yīng)的軸對(duì)目標(biāo)進(jìn)行拉伸、壓縮和反射三項(xiàng)功能。以參數(shù)x為例,若當(dāng)x大于1.0時(shí),表示沿x方向拉伸目標(biāo);若x小于1.0,表示沿x軸方向收縮目標(biāo);若x=-1.0表示沿x軸反射目標(biāo)。其中參數(shù)為負(fù)值時(shí)表示對(duì)目標(biāo)進(jìn)行相應(yīng)軸的反射變換。

四、總體設(shè)計(jì)與功能實(shí)現(xiàn)

4.1 主要界面設(shè)計(jì)

4.2 設(shè)置顏色界面

4.2.1 界面設(shè)置代碼:

void CGraphicsView::OnClock(){ WHAT_TO_DO=ID_CLOCK;

clean();int xx = 450, yy = 300, r = 150,d = 5;int i, white = RGB(255,255,255);mile(xx, yy, r, COLOR);Matrix m(xx, 240), s(xx, 200);Matrix t1(xx, yy, true), t2(-xx,-yy, true), mr(PI/1800), sr(PI/30);mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(), d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR);

for(i=0;i<120;i++){

::Sleep(80);

mile(m.getx(), m.gety(), d+1, white);mile(s.getx(), s.gety(), d, white);dne(m.getx(), m.gety(), xx, yy, white);dne(s.getx(), s.gety(), xx, yy, white);m = t1*mr*t2*m;s = t1*sr*t2*s;mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(),d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR);}} 4.2.2 點(diǎn)擊“設(shè)置--顏色”后,運(yùn)行結(jié)果如下:

4.3 二維線畫(huà)圖元實(shí)現(xiàn)

4.3.1 實(shí)現(xiàn)代碼:

void CGraphicsView::MidCir(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int r,x,y,deltax,deltay,d;r=sqrt(((double)x1-(double)x0)*((double)x1-(double)x0)+((double)y1-(double)y0)*((double)y1-(double)y0));x=0;y=r;deltax=3;deltay=2-r-r;d=1-r;while(x<=y){ ::Sleep(time);

pdc->SetPixel(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixel(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixel(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixel(-x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixel(y+x0,x+y0,color);

::Sleep(time);

pdc->SetPixel(-y+x0,x+y0,color);

::Sleep(time);

pdc->SetPixel(y+x0,-x+y0,color);

::Sleep(time);

pdc->SetPixel(-y+x0,-x+y0,color);

if(d<0)

{ d+=deltax;

deltax+=2;

x++;}

else

{ d+=deltax+deltay;

deltax+=2;

deltay+=2;

x++;

y--;}}} void CGraphicsView::midellispse(int xx, int yy, int r1, int r2, int color){ } void CGraphicsView::Ellipse(CDC *pdc, int x1, int y1, int x2, int y2, int color){

xx0=(x2+x1)/2;yy0=(y2+y1)/2;rra=abs(x2-x1)/2;rrb=abs(y2-y1)/2;if(rra==0 && rrb==0)return;Ellipse0(pdc,xx0,yy0,rra,rrb,color);} void CGraphicsView::Ellipse0(CDC *pdc, int x0, int y0, int a, int b, int color){

int i,yy;int x,y,deltax,deltay;int aa,aa2,aa3,bb,bb2,bb3;double d1,d2;aa=a*a;aa2=aa*2;aa3=aa*3;bb=b*b;bb2=bb*2;bb3=bb*3;x=0;y=b;d1=bb+aa*(-b+0.25);deltax=bb3;deltay=-aa2*b+aa2;pdc->SetPixelV(x+x0,y+y0,color);pdc->SetPixelV(x+x0,-y+y0,color);while(bb*(x+1)

yy=y;

if(d1<0)

{ d1+=deltax;

deltax+=bb2;

x++;}

else

{

d1+=deltax+deltay;

deltax+=bb2;

deltay+=aa2;

x++;

y--;}

::Sleep(time);

pdc->SetPixelV(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,-y+y0,color);} d2=bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*bb;deltax-=bb;deltay+=aa;while(y>0){ if(d2<0)

{ d2+=deltax+deltay;

deltax+=bb2;

deltay+=aa2;

x++;

y--;}

else

{ d2+=deltay;

deltay+=aa2;

y--;}

::Sleep(time);

pdc->SetPixelV(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,-y+y0,color);}} void CGraphicsView::DDALine(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int xx,yy,s,s1,s2,di;float dx,dy,k,x,y;dx=x1-x0;if(dx>=0)

s1=1;else

s1=-1;dy=y1-y0;if(dy>=0)

s2=1;else s2=-1;dx=abs(dx);dy=abs(dy);if(dx>=dy){

s=0;

di=(int)dx;

k=dy/dx*s2;} else { s=1;

di=(int)dy;

k=dx/dy*s1;} x=x0;y=y0;for(int i=0;i<=di;i++){if(s==0)

{

xx=(int)x;

yy=(int)(y+0.5);

::Sleep(time);

pdc->SetPixel(xx,yy,color);

x+=s1;

y+=k;}

else{

xx=(int)(x+0.5);

yy=(int)y;

::Sleep(time);

pdc->SetPixel(xx,yy,color);

y+=s2;

x+=k;}}} 4.3.2 點(diǎn)擊二維線畫(huà)圖元,課相應(yīng)畫(huà)出直線、圓和橢圓,結(jié)果如下:

4.4 畫(huà)多邊形功能的實(shí)現(xiàn)

4.4.1 部分實(shí)現(xiàn)代碼:

void CGraphicsView::OnDrawDuoBX(){ Vertex_Count dlg;if(dlg.DoModal()==IDOK){ if(dlg.m_vertex_count>MAX)

{ MessageBox(“輸入頂點(diǎn)數(shù)過(guò)大”);

return;}

VertexTotal=dlg.m_vertex_count;

CDC *pDC=GetDC();

CPen pen(PS_SOLID,2,RGB(255,255,255));

CPen *pOldpen=pDC->SelectObject(&pen);

pDC->MoveTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5));

int i;

for(i=1;i

pDC->LineTo((int)(inVertexArray[i].x+0.5),(int)(inVertexArray[i].y+0.5));

pDC->LineTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5));

pDC->SelectObject(pOldpen);

ReleaseDC(pDC);

inLength=0;

outLength=0;

WHAT_TO_DO=ID_DrawDuoBX;}}

4.4.2 點(diǎn)擊多邊形,輸入定點(diǎn)個(gè)數(shù),可繪制出相應(yīng)的多邊形,結(jié)果如下:

4.5 畫(huà)Bezier曲線功能的實(shí)現(xiàn)

4.5.1 部分實(shí)現(xiàn)代碼:

void CGraphicsView::OnBezier(){ // TODO: Add your command handler code here WHAT_TO_DO=ID_BEZIER;CDC *p=GetDC();

p->TextOut(10, 20, “PS:鼠標(biāo)左鍵添加曲線,鼠標(biāo)右鍵修改曲線.”);

ReleaseDC(p);} void CGraphicsView::OnBezierClear(){ n =-1;RedrawWindow();} void CGraphicsView::DrawBezier(DPOINT *p){ if(n <= 0)return;if((p[n].x < p[0].x+1)&&(p[n].x > p[0].x-1)&&(p[n].y < p[0].y+1)&&(p[n].y > p[0].y-1)){ pDC->SetPixel(p[0].x, p[0].y, COLOR);

return;} DPOINT *p1;p1 = new DPOINT[n+1];int i, j;p1[0] = p[0];for(i=1;i<=n;i++){ for(j=0;j<=n-i;j++)

{ p[j].x =(p[j].x + p[j+1].x)/2;

p[j].y =(p[j].y + p[j+1].y)/2;}

p1[i] = p[0];} DrawBezier(p);DrawBezier(p1);delete p1;} void CGraphicsView::OnBezierAdd(){ AddorMove = 1;} void CGraphicsView::OnBezierMove(){ AddorMove =-1;} void CGraphicsView::OnMouseMove(UINT nFlags, CPoint point){ switch(WHAT_TO_DO){ case ID_BEZIER:

{ if(current >= 0){ points[current].x = point.x;

points[current].y = point.y;

RedrawWindow();} if(current2 >= 0)

{ points[current2].x = point.x;

points[current2].y = point.y;

RedrawWindow();}

break;} default:break;} CView::OnMouseMove(nFlags, point);} 4.5.2 點(diǎn)擊曲線--Beizer曲線,可實(shí)現(xiàn)Beizer曲線的繪制功能,繪制結(jié)果如下圖:

圖 1 圖 2

4.5.3 點(diǎn)擊曲線--Beizer曲線,可實(shí)現(xiàn)Beizer曲線的移動(dòng),鼠標(biāo)點(diǎn)擊其中的任一點(diǎn),可實(shí)現(xiàn)曲線的移動(dòng),繪制結(jié)果如下圖:

上圖1移動(dòng)后的曲線

上圖2移動(dòng)后的曲線 4.6 二維圖形變換的實(shí)現(xiàn)

可以實(shí)現(xiàn)一橢圓在界面上的隨機(jī)移動(dòng),一圓在界面上饒某一點(diǎn)的旋轉(zhuǎn)和一正方形由大變小在變大的變化,部分實(shí)現(xiàn)代碼如下: void CGraphicsView::OnXuanzhuan(){ WHAT_TO_DO=ID_XUANZHUAN;

time=0;

OnClear();

CClientDC dc(this);CDC* pDC=&dc;

int i, white=RGB(255,255,255), point [2][2]={{300,200},{300,250}};

Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]);

int midx=(point[0][0]+point[1][0])/2,midy=(point[0][1]+point[1][1])/2;

Matrix t1(midx, midy,true), t2(-midx,-midy,true);

Matrix r(PI/50);

Matrix temp(midx, midy,true);

temp = t1*r*t2;

for(i=0;i<200;i++){

::Sleep(50);

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), white);

a = temp*a;

b = temp*b;

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);}

for(i=0;i<200;i++){

::Sleep(50);

MidCir(pDC,a.getx(), a.gety(), b.getx(), b.gety(), white);

a = temp*a;

b = temp*b;

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);}

time=5;} void CGraphicsView::OnUpdateXuanzhuan(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_XUANZHUAN);} void CGraphicsView::OnScale(){ WHAT_TO_DO=ID_SCALE;

OnClear();CClientDC dc(this);CDC* pDC=&dc;

time=0;int i,white=RGB(255,255,255), point[4][2]={{300,250},{400,250},{300,300},{400,300}};float sx=0.9,sy=0.85;int midx=(point[0][0]+point[3][0])/2,midy=(point[0][1]+point[3][1])/2;Matrix s1(sx,sy),s2(1/sx,1/sy);Matrix t1(midx, midy,true), t2(-midx,-midy,true);

Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]);Matrix c(point[2][0],point[2][1]), d(point[3][0],point[3][1]);Matrix temp(midx, midy,true);temp = t1*s1*t2;DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);for(i=0;i<20;i++){

::Sleep(30);

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white);

a=temp*a;

b=temp*b;

c=temp*c;

d=temp*d;

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} temp = t1*s2*t2;for(i=0;i<20;i++){

::Sleep(30);

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white);

a=temp*a;

b=temp*b;

c=temp*c;

d=temp*d;

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} time=5;} void CGraphicsView::OnUpdateScale(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_SCALE);} 4.7 三維圖形的變換

主要實(shí)現(xiàn)三維圖形的上下左右平移,分別繞X軸Y軸Z軸的旋轉(zhuǎn),放大和縮小,以及正方體六個(gè)面的顏色變換,除此之外,還可以選擇背景顏色的改變 4.7.1 部分代碼如下:

void CGraphicsView::OnAoduomianti(){ WHAT_TO_DO=ID_AODUOMIANTI;CDrawDLG dlg1;dlg1.DoModal();} void CGraphicsView::OnUpdateAoduomianti(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_AODUOMIANTI);} void CDrawDLG::OnPaint()

{ CPaintDC dc(this);// device context for painting CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();// CDC *PDC=pWnd->GetDC();Draw();} void CDrawDLG::Draw(){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect);D v[8]={ {-fs,-fs,fs},{-fs,fs,fs},{fs,fs,fs},{fs,-fs,fs},{-fs,-fs,-fs},{-fs,fs,-fs},{fs,fs,-fs},{fs,-fs,-fs} },d[8];

POINT p0[4],p1[4],p2[4],p3[4],p4[4],p5[4],w[8];int z[8];

for(int i=0;i<8;i++){ d[i].x=v[i].x;

d[i].y=(int)(v[i].y*cos(a*DU)-v[i].z*sin(a*DU));

d[i].z=(int)(v[i].y*sin(a*DU)+v[i].z*cos(a*DU));

v[i].x=(int)(d[i].x*cos(b*DU)+d[i].z*sin(b*DU));

v[i].y=d[i].y;

v[i].z=(int)(d[i].z*cos(b*DU)-d[i].x*sin(b*DU));

d[i].x=(int)(v[i].x*cos(c*DU)-v[i].y*sin(c*DU));

d[i].y=(int)(v[i].x*sin(c*DU)+v[i].y*cos(c*DU));

d[i].z=v[i].z;

w[i].x=d[i].x+cx;

w[i].y=d[i].y+cy;

z[i]=d[i].z;} p0[0]=w[0];p0[1]=w[1];p0[2]=w[2];p0[3]=w[3];p1[0]=w[4];p1[1]=w[5];p1[2]=w[6];p1[3]=w[7];

p2[0]=w[0];p2[1]=w[1];p2[2]=w[5];p2[3]=w[4];p3[0]=w[1];p3[1]=w[2];p3[2]=w[6];p3[3]=w[5];p4[0]=w[2];p4[1]=w[3];p4[2]=w[7];p4[3]=w[6];p5[0]=w[0];p5[1]=w[3];p5[2]=w[7];p5[3]=w[4];switch(Maxnum(z,7)){ case 0:fill(p0,p2,p5,0,2,5);break;

case 1:fill(p0,p2,p3,0,2,3);break;

case 2:fill(p0,p3,p4,0,3,4);break;

case 3:fill(p0,p4,p5,0,4,5);break;

case 4:fill(p1,p2,p5,1,2,5);break;

case 5:fill(p1,p2,p3,1,2,3);break;

case 6:fill(p1,p3,p4,1,3,4);break;

case 7:fill(p1,p4,p5,1,4,5);break;}} BOOL CDrawDLG::OnInitDialog(){ CDialog::OnInitDialog();m_scroll1.SetScrollRange(-180,180);m_scroll1.SetScrollPos(0);m_scroll2.SetScrollRange(-180,180);m_scroll2.SetScrollPos(0);m_scroll3.SetScrollRange(-180,180);m_scroll3.SetScrollPos(0);m_scroll4.SetScrollRange(0,350);m_scroll4.SetScrollPos(200);m_scroll5.SetScrollRange(0,300);m_scroll5.SetScrollPos(115);m_scroll6.SetScrollRange(0.00,300.00);m_scroll6.SetScrollPos(50.00);a=b=c=0;fs=50.00;SetTimer(1,100,NULL);Ctrl=0;cx=200;cy=115;COLOR1=RGB(123,234,43);COLOR2=RGB(123,123,0);COLOR3=RGB(123,24,235);COLOR4=RGB(0,123,95);COLOR5=RGB(23,234,34);COLOR6=RGB(234,124,0);COLOR7=RGB(0,43,98);return TRUE;// return TRUE unless you set the focus to a control} void CDrawDLG::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ int nID=pScrollBar->GetDlgCtrlID();switch(nID){ case IDC_SCROLLBAR1: a=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: a--;break;

case SB_LINERIGHT: a++;break;

case SB_PAGELEFT: a-=10;break;

case SB_PAGERIGHT: a+=10;break;

case SB_THUMBTRACK: a=nPos;break;}

if(a<-180)a=180;

if(a>180)a=-180;

pScrollBar->SetScrollPos(a);

break;case IDC_SCROLLBAR2: b=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: b--;break;

case SB_LINERIGHT: b++;break;

case SB_PAGELEFT: b-=10;break;

case SB_PAGERIGHT: b+=10;break;

case SB_THUMBTRACK: b=nPos;break;}

if(b<-180)b=180;

if(b>180)b=-180;

pScrollBar->SetScrollPos(b);

break;case IDC_SCROLLBAR3: c=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: c--;break;

case SB_LINERIGHT: c++;break;

case SB_PAGELEFT: c-=10;break;

case SB_PAGERIGHT: c+=10;break;

case SB_THUMBTRACK: c=nPos;break;}

if(c<-180)c=180;

if(c>180)c=-180;

pScrollBar->SetScrollPos(c);

break;case IDC_SCROLLBAR4: cx=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: cx--;break;

case SB_LINERIGHT: cx++;break;

case SB_PAGELEFT: cx-=10;break;

case SB_PAGERIGHT: cx+=10;break;

case SB_THUMBTRACK: cx=nPos;break;}

if(cx<0)cx=200;

if(cx>350)cx=200;

pScrollBar->SetScrollPos(cx);

break;case IDC_SCROLLBAR5: cy=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: cy--;break;

case SB_LINERIGHT: cy++;break;

case SB_PAGELEFT: cy-=10;break;

case SB_PAGERIGHT: cy+=10;break;

case SB_THUMBTRACK: cy=nPos;break;}

if(cy<0)cy=300;

if(cy>300)cy=0;

pScrollBar->SetScrollPos(cy);

break;

case IDC_SCROLLBAR6: fs=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: fs--;break;

case SB_LINERIGHT: fs++;break;

case SB_PAGELEFT: fs-=0.55;break;

case SB_PAGERIGHT: fs+=0.55;break;

case SB_THUMBTRACK: fs=nPos;break;}

if(fs<0)fs=50;

if(fs>300)fs=50;

pScrollBar->SetScrollPos(fs);

break;// UpdateData(FALSE);} // Invalidate();Draw();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);} void CDrawDLG::OnOK(){ KillTimer(1);

CDialog::OnOK();} int CDrawDLG::Maxnum(int *p, int n){ int max=p[0];int x;for(int i=0;i<=n;i++){

if(max<=p[i])

{ max=p[i];x=i;} } return x;} void CDrawDLG::fill(POINT *x, POINT *y, POINT *z, int i,int j,int q){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect);

CDC dcmem;dcmem.CreateCompatibleDC(pDC);CBitmap bmp,*oldbmp;bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());oldbmp=dcmem.SelectObject(&bmp);CBrush brush[6];brush[0].CreateSolidBrush(COLOR1);brush[1].CreateSolidBrush(COLOR2);brush[2].CreateSolidBrush(COLOR3);brush[3].CreateSolidBrush(COLOR4);brush[4].CreateSolidBrush(COLOR5);brush[5].CreateSolidBrush(COLOR6);CBrush *oldbrush=dcmem.SelectObject(&brush[i]);dcmem.FillSolidRect(rect,COLOR7);dcmem.Polygon(x,4);dcmem.SelectObject(&brush[j]);dcmem.Polygon(y,4);dcmem.SelectObject(&brush[q]);dcmem.Polygon(z,4);dcmem.SelectObject(oldbrush);for(int b=0;b<6;b++)brush[b].DeleteObject();pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &dcmem,0,0,SRCCOPY);dcmem.SelectObject(oldbmp);bmp.DeleteObject();dcmem.DeleteDC();} 4.7.2 運(yùn)行結(jié)果如下:

(1)實(shí)現(xiàn)多面體的上下左右平移(2)實(shí)現(xiàn)多面體的繞軸旋轉(zhuǎn):

(3)實(shí)現(xiàn)多面體的放大縮小:

(4)實(shí)現(xiàn)多面體及背景的顏色設(shè)置:

(5)三維圖形變換整體圖形

五、實(shí)驗(yàn)心得體會(huì)

在本次課程設(shè)計(jì)過(guò)程中,基本掌握了計(jì)算機(jī)圖形學(xué)關(guān)于圖形繪制變換的基礎(chǔ)知識(shí),DDA法畫(huà)直線和中心點(diǎn)法畫(huà)圓及橢圓的方法,還對(duì)圖形的變換及需要用到的一系列的函數(shù)有了相應(yīng)的理解,也了解的很多有關(guān)于圖形學(xué)中三維圖形的變換的知識(shí)。不過(guò)都只是皮毛而已,從中鍛煉了自己的動(dòng)手做實(shí)驗(yàn)的能力,但同時(shí)也讓自己看清了自己的水平,以便在以后的生活里多加強(qiáng)有關(guān)這方面的學(xué)習(xí),從而提升自己在圖形學(xué)方面的知識(shí)水平。

在本次課程設(shè)計(jì)中,設(shè)計(jì)方案存在著很多的死板化的實(shí)現(xiàn)方法,也是很不人性化的一點(diǎn),只提供了畫(huà)一種曲線的方法,且畫(huà)出的曲線只能移動(dòng),此為本次設(shè)計(jì)方案的不足之一;然后就是能實(shí)現(xiàn)曲面和多邊形的繪制,卻沒(méi)有對(duì)應(yīng)的實(shí)現(xiàn)繪制好圖形后直接對(duì)其進(jìn)行平移、選擇等變換,此為設(shè)計(jì)方案不足之二。再者就是三維圖形只能實(shí)現(xiàn)變換不能實(shí)現(xiàn)繪制,此為設(shè)計(jì)方案不足之三。鑒于個(gè)人能力真的有限,所以只能設(shè)計(jì)出此種級(jí)別的效果了。因?yàn)閷?shí)驗(yàn)重要的只是思想過(guò)程,效果的不美觀只能是因?yàn)閷W(xué)習(xí)的知識(shí)還遠(yuǎn)遠(yuǎn)不夠,所以不能設(shè)計(jì)出完美的全面的圖形繪制變換程序。

經(jīng)過(guò)此次設(shè)計(jì),使我學(xué)到了很多東西,在沒(méi)有開(kāi)始做程序之前,沒(méi)有任何思路,不知道該從哪里入手,可能是因?yàn)樽约浩綍r(shí)不認(rèn)真聽(tīng)課的緣故。后來(lái)經(jīng)過(guò)上網(wǎng)查詢(xún)資料,翻閱參考書(shū),在別人做的程序的啟發(fā)下,才有了做此程序設(shè)計(jì)的眉目。在設(shè)計(jì)過(guò)程中遇到了很多的問(wèn)題,在這里需要感謝王征風(fēng)老師的幫助和指導(dǎo),以及同學(xué)的幫助,最后一個(gè)個(gè)問(wèn)題都被解決了,寫(xiě)出了完整的程序設(shè)計(jì)。最后也發(fā)現(xiàn),其實(shí)只要努力,寫(xiě)出一個(gè)設(shè)計(jì)不是很困難,重要的是自己在寫(xiě)程序的過(guò)程中,要會(huì)學(xué)習(xí),會(huì)查閱資料。這次的課程設(shè)計(jì)讓我學(xué)習(xí)到了很多,以后我會(huì)努力提高自己在圖形學(xué)方面的知識(shí)水平。

下載迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解word格式文檔
下載迭代法求兩點(diǎn)邊值問(wèn)題課程設(shè)計(jì)分解.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

主站蜘蛛池模板: 精品国产av色一区二区深夜久久| 大陆国语对白国产av片| 亚洲国产欧美中文手机在线| 日韩亚洲中字无码一区二区三区| 在线精品亚洲第一区焦香| 97久久超碰成人精品网页| 午夜精品一区二区三区在线观看| 亚洲 丝袜 另类 校园 欧美| 亚洲成av人片乱码色午夜| 国产精品无码久久一线| 久久综合狠狠综合久久| 18黑白丝水手服自慰喷水网站| 性欧美老人牲交xxxxx视频| 国产三级av在线播放| 乱人伦中文视频在线| 国内精品久久久久久影院8f| 亚洲中文字幕av无码专区| 日韩亚洲制服丝袜中文字幕| 欧美日韩一区二区三区在线观看视频| 天天爽夜夜爽人人爽免费| 色综合久久精品亚洲国产| 亚洲欧美乱日韩乱国产| 狠狠色噜噜狠狠狠888米奇视频| 免费网站看sm调教视频| 国产sm调教折磨视频| 国产电影一区二区三区| 亚洲熟女www一区二区三区| 日夜啪啪一区二区三区| 精品伊人久久久大香线蕉天堂| 电影内射视频免费观看| 精品久久人人爽天天玩人人妻| 国产精品亚洲lv粉色| 精品免费一区二区三区在| 亚洲精品欧美二区三区中文字幕| 日日狠狠久久8888偷偷色| 中文字幕aⅴ人妻一区二区| 亚洲欧美中文日韩v在线97| 在办公室被c到呻吟的动态图| 日韩欧美群交p片內射中文| 三级日本高清完整版热播| 国产精品成人永久在线|