當前位置:首頁 » 操作系統 » 計算機圖形學演算法

計算機圖形學演算法

發布時間: 2022-01-29 01:10:23

⑴ 計算機圖形學程序

/*Bezier曲線的Casteljau演算法*/

float decas(degree,codff,t)
float coeff[];
float t;
int degree;
{
int r,i;
float t1;
float codffa[10];
t1=1.0-t;
for(i=0;i<=degree;i++)
coeffa[i]=coeff[i];
for(r=1;r<degree;r++)
for(i=0;i<=degree-r;i++)
{
coeffa[i]=t1*coeffa[i]+t*coeffa[i+1];
}
return (coeffa[0]);
}

/*B樣條曲線—deBoor分割演算法*/

float deboor(degree,coeff,knot,u,i)
float coeff[],knot[];
float u;
int degree,i;
{
int k,j;
float t1,t2;
float coeffa[30];
for(j=i-degree+1;j<=i+1;j++)
coeffa[j]=coeff[j-i+degree-1];
for(k=1;i<=degree;k++)
forj=i+1;j>=i-degree+k+1;j--)
{
t1=(knot[j+degree-k]-u)/(knot[j+degree-k]-knot[j-1]);
t2=1.0-t1;
coeffa[j]=t1*coeffa[j-1]+t2*coeffa[j];
}
return (coeffa[i+1]);
}

/*Bezier曲線的Horner演算法*/

float hornbez(degree,coeff,t)
int degree;
float coff[];
float t;
{
int i,n;
float fact,t1,aux;
t1=1.0-t;fact=1.0;n=1;
aux=coeff[0]*t1;

for(i=1;i<degree;i++)
{
face=fact*t;
n=n*(degree-i+1)/i;
aux=(aux+fact*n*coeff[i])*t1;
}
aux=aux+fact*t*codff[degree];
return aux;
}

⑵ 計算機圖形學演算法處理線段,急

輸入矩形剪裁窗口的大小以後,你把剪裁以後的線的端點坐標記錄下來,重新畫一次就行了。

⑶ 計算機圖形學原理及演算法教程(Visual C++版)

http://lib.verycd.com/2006/04/05/0000097418.html
你自己下載吧!

⑷ 計算機圖形學的研究演算法分類有哪些

我也想知道

⑸ 計算機圖形學直線生成演算法

我連畫圓的一塊給你吧
需要橡皮筋
橢圓
樹什麼的可以和我說
我是用
c#寫的
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
namespace
line
{
public
partial
class
Form1
:
Form
{
Graphics
g;
public
Form1()
{
InitializeComponent();
g
=
pictureBox1.CreateGraphics();
}
private
void
button1_Click_1(object
sender,
EventArgs
e)
{
//
g.TranslateTransform(-300,-300);
g.Clear(BackColor);
double
x1,
x2,
y1,
y2;
double
x,
y;
x1
=
System.Convert.ToSingle(textBox1.Text);
y1
=
System.Convert.ToSingle(textBox2.Text);
x2
=
System.Convert.ToSingle(textBox3.Text);
y2
=
System.Convert.ToSingle(textBox4.Text);
x
=
x1;
double
k
=
(y1
-
y2)
/
(x1
-
x2);
Color
color1
=
Color.FromArgb(255,
0,
0);
//定義顏色
Brush
bru1
=
new
SolidBrush(color1);//定義筆
Color
color2
=
Color.FromArgb(0,
255,
0);
//定義顏色
Brush
bru2
=
new
SolidBrush(color2);//定義筆
Pen
pen1
=
new
Pen(bru1,
1);
Pen
pen2
=
new
Pen(bru2,
1);
while
(x
<
x2)
{
//
textBox3.Text
=
System.Convert.ToString(k);
y
=
(double)k
*
(x
-
x1)
+
y1;
double
a;
a=y%1;
float
xx
=
Convert.ToSingle(x);
float
yy
=
Convert.ToSingle(y);
if
(a
>
0.5)
{
g.DrawLine(pen1,
xx,
yy,
xx,yy+1);
}
else
{
g.DrawLine(pen2,
xx,
yy,
xx,
yy+1);
}
x++;
}
//g.DrawLine(p,10,10,100,100);
}
private
void
button2_Click(object
sender,
EventArgs
e)
{
g.TranslateTransform(300,
300);
g.Clear(BackColor);
float
r;//r為圓的圓心
r
=System.Convert.ToSingle(textBox6.Text);
Color
color1
=
Color.FromArgb(255,
0,
0);
//定義顏色
Brush
bru1
=
new
SolidBrush(color1);//定義筆
Color
color2
=
Color.FromArgb(0,
255,
0);
//定義顏色
Brush
bru2
=
new
SolidBrush(color2);//定義筆
Pen
pen1
=
new
Pen(bru1,1);
Pen
pen2
=
new
Pen(bru2,
1);
float
x
=
0;
float
y
=
r;
while
(x
<r+3)
{
y
=
(float)System.Math.Sqrt(r
*
r
-
x
*
x);
float
a;
a
=
y
%
1;
y
=
y
-
a;
if
(a
>
0.5)
{
g.DrawLine(pen1,
x,
y,
x,
y+1);
g.DrawLine(pen1,
-x,
y,
-x,
y
+
1);
g.DrawLine(pen1,
x,
-y,
x,
-y
+
1);
g.DrawLine(pen1,
-x,
-y,
-x,
-y
+
1);
}
else
{
g.DrawLine(pen2,
x,
y,
x,
y+1);
g.DrawLine(pen2,
-x,
y,
-x,
y
+
1);
g.DrawLine(pen2,
x,-
y,
x,-
y
+
1);
g.DrawLine(pen2,
-x,
-y,-
x,
-y
+
1);
}
x++;
}
g.TranslateTransform(-300,
-300);
}
private
void
button3_Click(object
sender,
EventArgs
e)
{
}
private
void
comboBox1_SelectedIndexChanged(object
sender,
EventArgs
e)
{
switch
(comboBox1.Text)
{
case
"畫圓":
{
textBox1.Visible
=
false;
textBox2.Visible
=
false;
textBox3.Visible
=
false;
textBox4.Visible
=
false;
textBox5.Visible
=
true;
textBox6.Visible
=
true;
textBox7.Visible
=
false;
textBox8.Visible
=
false;
label1.Visible
=
false;
label2.Visible
=
false;
label3.Visible
=
false;
label4.Visible
=
false;
label5.Visible
=
true;
label6.Visible
=
true;
label7.Visible
=
false;
label8.Visible
=
false;
label9.Visible
=
true;
button1.Visible
=
false;
button2.Visible
=
true;
button3.Visible
=
false;
break;
}
case"畫線":
{
textBox1.Visible
=
true;
textBox2.Visible
=
true;
textBox3.Visible
=
true;
textBox4.Visible
=
true;
textBox5.Visible
=
false;
textBox6.Visible
=
false;
textBox7.Visible
=
false;
textBox8.Visible
=
false;
label1.Visible
=
true;
label2.Visible
=
true;
label3.Visible
=
true;
label4.Visible
=
true;
label5.Visible
=
false;
label6.Visible
=
false;
label7.Visible
=
false;
label8.Visible
=
false;
label9.Visible
=
false;
button1.Visible
=
true;
button2.Visible
=
false;
button3.Visible
=
false;
break;
}
case"畫橢圓":
{
textBox1.Visible
=
false;
textBox2.Visible
=
false;
textBox3.Visible
=
false;
textBox4.Visible
=
false;
textBox5.Visible
=
false;
textBox6.Visible
=
false;
textBox7.Visible
=
true;
textBox8.Visible
=
true;
label1.Visible
=
false;
label2.Visible
=
false;
label3.Visible
=
false;
label4.Visible
=
false;
label5.Visible
=
false;
label6.Visible
=
false;
label7.Visible
=
true;
label8.Visible
=
true;
label9.Visible
=
false;
button1.Visible
=
false;
button2.Visible
=
false;
button3.Visible
=
true;
break;
}
}
}
}
}

⑹ 計算機圖形學, 光線跟蹤演算法的過程是什麼

光線跟蹤思路:從視點出發,通過圖像平面上每個像素中心向場景發出一條光線,光線的起點為視點,方向為像素中心和視點連線單位向量。光線與離視點最近的場景物體表面交點有三種可能:
當前交點所在的物體表面為理想漫射面,跟蹤結束。
當前交點所在的物體表面為理想鏡面,光線沿其鏡面發射方向繼續跟蹤。
當前交點所在的物體表面為規則透射面,光線沿其規則透射方向繼續跟蹤。

偽代碼:

void TraceRay(const Vec3& start, const Vec3& direction, int depth, Color& color)
{
Vec3 intersectionPoint, reflectedDirection, transmittedDirection;
Color localColor, reflectedColor, transmittedColor;
if (depth >= MAX_DEPTH) {
color = Black; //#000
}
else {
Ray ray(start, direction); //取start起點,方向direction為跟蹤射線;
if ( !scene->HasIntersection(ray) )
color = BackgroundColor;
else {
計算理起始點start最近的交點intersectionPoint,
記錄相交物體intersectionObject,

// #1
Shade(intersectionObject, intersectionPoint, localColor);

// #2
if ( intersectionPoint所在面為鏡面 ) {
計算跟蹤光想S在intersectionPoint處的反射光線方向reflectedDirection,
TraceRay(intersectionPoint, reflectedDirection, depth+1, reflectedColor);
}
// #3
if ( intersectionPoint所在的表面為透明面 ) {
計算跟蹤光線S在intersectionPoint處的規則透射光線方向transmittedDirection,
TraceRay(intersectionPoint, transmittedDirection, depth+1, transmittedColor);
}
// #summarize
color = localColor + Ks * reflectedColor + Kt * transmittedColor;
}// else
} //else
}
// 局部光照模型計算交點intersectionPoint處的局部光亮度localColor
void Shade(const Object& intersectionObj, const Vec3& intersectionPoint, Color& localColor)
{
確定intersectionObj在intersectionPoint處的單位法向量N,
漫反射系數Kd,
鏡面反射系數Ks,
環境反射系數Ka;
localColor = Ka * Ia; //Ia為環境光亮度
for ( 每一個點光源PointLight ) {
計算入射光線單位向量L和虛擬鏡面法向單位向量H,
// 由Phong模型計算光源PointLight在intersectionPoint處的漫反射和鏡面反射光亮度
localColor += ( Ipointlight * ( Kd * (N.dot(L)) + Ks * (N.dot(H))^n ) );
}
}

⑺ 圖像演算法屬於計算機圖形學嗎

只能說有關聯。
計算機圖形學的主要研究內容是:研究如何在計算機中表示圖形、以及利用計算機進行圖形的計算、處理和顯示的相關原理與演算法。

圖像和圖形有區別:圖形是矢量的、純數字式的。圖像常常由來自現實世界的信號產生,有時也包括圖形。
圖像和圖形都是數據的簡單堆積,圖像是像素的疊加,圖形則是基本圖元的疊加。
圖像演算法在數字圖像處理領域應用更多。

⑻ 計算機圖形學所涉及的演算法有哪些

圖論嗎?數據結構書上有啊,比如迪傑斯特拉演算法,普里姆演算法,弗洛伊德演算法等等

⑼ 計算機圖形學 問題 中點圓演算法和掃描線演算法

寫個文檔解釋一下。

⑽ 求計算機圖形學的中點畫拋物線詳細演算法,已經每一步實現的功能,最好能說一下思想。謝謝!

拋物線是指平面內到一個定點F(焦點)和一條定直線l(准線)距離相等的點的軌跡。它有許多表示方法,例如參數表示,標准方程表示等等。 它在幾何光學和力學中有重要的用處。 拋物線也是圓錐曲線的一種,即圓錐面與平行於某條母線的平面相截而得的曲線。二次函數的圖像就是一條拋物線,它是一個軸對稱圖形。拋物線與對稱軸的交點叫做拋物線的頂點。拋物線即把物體拋擲出去,落在遠處地面,這物體在空中經過的曲線。
平面內,到定點與定直線的距離相等的點的軌跡叫做拋物線。其中定點叫拋物線的焦點,定直線叫拋物線的准線。當拋物線的頂點為原點時,拋物線有以下特徵:
①原點在拋物線上;
②對稱軸為坐標軸;
③准線與對稱軸垂直,垂足與焦點分別對稱於原點,它們與原點的距離都等於一次項系數的絕對值的1/4。
對稱軸為x軸時,方程右端為±2px,方程的左端為y^2;對稱軸為y軸時,方程的右端為±2py,方程的左端為x^2;開口方向與x軸(或y軸)的正半軸相同時,焦點在x軸(y軸)的正半軸上,方程的右端取正號;開口方向與x(或y軸)的負半軸相同時,焦點在x軸(或y軸)的負半軸上,方程的右端取負號。
拋物線的弦是連接拋物線上任意兩點的線段。
拋物線的焦弦是經過拋物線焦點的弦。
拋物線的直徑是拋物線一組平行弦中點的軌跡。這條直徑也叫這組平行弦的共軛直徑。
希望我能幫助你解疑釋惑。

熱點內容
安卓手機hd怎麼消除 發布:2024-06-22 21:15:14 瀏覽:536
sql剔除重復 發布:2024-06-22 21:05:59 瀏覽:313
c語言實現原理 發布:2024-06-22 21:05:44 瀏覽:962
安卓什麼時候上架的 發布:2024-06-22 20:56:46 瀏覽:425
javadoc 發布:2024-06-22 20:31:59 瀏覽:848
資料庫動態查詢 發布:2024-06-22 20:19:18 瀏覽:951
linuxtab鍵 發布:2024-06-22 20:16:28 瀏覽:486
解壓成光碟0 發布:2024-06-22 19:37:20 瀏覽:1000
keil4編譯輸出 發布:2024-06-22 19:37:20 瀏覽:799
方舟怎麼設置私人伺服器 發布:2024-06-22 19:37:18 瀏覽:113