国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、實(shí)現(xiàn)方案

  對(duì)于一個(gè)二維圖形作平移、旋轉(zhuǎn)、放縮變換,可以轉(zhuǎn)換為在二維坐標(biāo)系中圖形的所有點(diǎn)分別可以對(duì)應(yīng)到在x,y軸方向分別平移tx,ty(平移)、繞一點(diǎn)旋轉(zhuǎn)固定的角(旋轉(zhuǎn))、在x,y軸方向分別放縮sx,sy倍。

  對(duì)于變換的原理,只需要將原圖形的點(diǎn)通過(guò)極坐標(biāo)或者相加、相乘,再結(jié)合二維矩陣的原理即可實(shí)現(xiàn),如果圖形需要對(duì)圖形對(duì)象進(jìn)行旋轉(zhuǎn)和放縮兩類變換進(jìn)行多次操作,則可以首先將兩變換矩陣合成一個(gè)復(fù)合變換矩陣。針對(duì)于平移是矩陣的相加,為了統(tǒng)一成相乘,可以用齊次坐標(biāo)可以解決。

  如下為在齊次坐標(biāo)下,各原點(diǎn)與變換矩陣形式。

計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))

  所以,若要完成更復(fù)雜的變換,可以通過(guò)將這些基本變換合成一個(gè)復(fù)合變換,將多次運(yùn)算轉(zhuǎn)換成的一次性矩陣與向量相乘即可完成復(fù)雜變換。

  如任一圖形關(guān)于任意的反射軸y=a+bx的反射變換,可以轉(zhuǎn)換為(1)平移-a;(2)旋轉(zhuǎn)至與x/y軸重合;(3)沿x/y軸對(duì)稱;(3)旋轉(zhuǎn)回(2)之前的位置;(4)平移a四步即可完成。

二、代碼實(shí)現(xiàn)

// CMatrixView 繪圖
//變換矩陣
struct Matrix {
	double a[10][10];
	Matrix() {
        memset(a, 0, sizeof(a));
	}
	void init(){
		for (int i = 0; i <= 4; i++) {
				a[i][i] = 1;
		}
	}
};
//坐標(biāo)點(diǎn)
struct Point
{
	double x, y;
};

//矩陣相乘
Matrix get_mx(Matrix a, Matrix b) {
	Matrix tmp;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			double sum=0;
			for (int k = 0; k < 3; k++){
				sum += a.a[i][k] * b.a[k][j];
			}
			tmp.a[i][j] = sum;
		}
	}
	return tmp;
}

//得到與矩陣相乘后的點(diǎn)
Point matrix_point(Point p, Matrix m) {
	Matrix n;
	n.a[0][0] = p.x;
	n.a[1][0] = p.y;
	n.a[2][0] = 1;
	for (int i = 0; i < 3; i++) {
		double sum = 0;
		for (int j = 0; j < 3; j++) {
			sum+= m.a[i][j] * n.a[j][0];
		}
		n.a[i][1] = sum;
	}
	p.x = n.a[0][1] / n.a[2][1];
	p.y = n.a[1][1] / n.a[2][1];
	return p ;
}

//平移
Matrix translate(double Tx, double Ty, Matrix m) {
	Matrix tmp;
	tmp.init();
	tmp.a[0][2] = Tx;
	tmp.a[1][2] = Ty;
	tmp = get_mx(m, tmp);
	return tmp;
}
//放縮
Matrix Shrink(double Tx, double Ty, Matrix m){
	Matrix tmp;
	tmp.init();
	tmp.a[0][0] = Tx;
	tmp.a[1][1] = Ty;
	tmp = get_mx(m, tmp);
	return tmp;
}

//旋轉(zhuǎn)
Matrix revolve(double cot, Matrix m) {
	Matrix tmp;
	tmp.init();
	tmp.a[0][0] = cos(cot);
	tmp.a[1][1] = cos(cot);
	tmp.a[0][1] = -(sin(cot));
	tmp.a[1][0] = sin(cot);
	tmp = get_mx(m, tmp);
	return tmp;
}

//軸對(duì)稱
Matrix axisymmetric(int x, Matrix m) {
	Matrix tmp;
	tmp.init();
	//x==1為x軸對(duì)稱
	if (x == 1) {
		tmp.a[1][1] = -1;
	}
	//否則為y軸對(duì)稱
	else {
		tmp.a[0][0] = -1;
	}
	tmp = get_mx(m, tmp);
	return tmp;
}

//關(guān)于任意軸對(duì)稱
Matrix symmetry(double k, double b, Matrix m) {
	Matrix tmp;
	tmp.init();
	//先平移
	double cot = atan(k);
	tmp = translate(0, -b, tmp);
	//再旋轉(zhuǎn)
	tmp = revolve(cot, tmp);
	//再沿x軸對(duì)稱
	tmp = axisymmetric(1, tmp);
	//再旋轉(zhuǎn)
	tmp = revolve(-cot, tmp);
	//再平移
	tmp = translate(0, b, tmp);
	tmp = get_mx(m, tmp);
	return tmp;
}

void Line(CDC* pDC, Point p1, Point p2) {
	pDC->MoveTo(p1.x, p1.y);
	pDC->LineTo(p2.x, p2.y);
}

void Linepoly(CDC* pDC, Point p1, Point p2,Point p3,int color) {
	CPen m_newPen, * m_oldPen;
	//創(chuàng)建新畫筆
	m_newPen.CreatePen(PS_SOLID, 3,color);
	//將新畫筆選入設(shè)備上下文,并且保存舊畫筆
	m_oldPen = pDC->SelectObject(&m_newPen);
	pDC->MoveTo(p1.x, p1.y);
	pDC->LineTo(p2.x, p2.y);
	pDC->MoveTo(p2.x, p2.y);
	pDC->LineTo(p3.x, p3.y);
	pDC->MoveTo(p3.x, p3.y);
	pDC->LineTo(p1.x, p1.y);
	pDC->SelectObject(m_oldPen);

}
//實(shí)現(xiàn)程序:
//沿任意軸對(duì)稱
	Point p7 = { -10,10 };
	Point p8 = { -90,90 };
	Point p9 = { -20,50 };
	//變換前為棕紅色
	Linepoly(pDC, p7, p8, p9,RGB(128,0,0));
	Point p10 = { -100,-100 };
	Point p11 = {100,100};
	Line(pDC, p10, p11);
	Matrix m4;
	m4.init();
	m4 = symmetry(1, 0, m4);
	p7 = matrix_point(p7, m4);
	p8 = matrix_point(p8, m4);
	p9 = matrix_point(p9, m4);
	//變換后為藍(lán)色
	Linepoly(pDC, p7, p8, p9,RGB(0,51,153));

三、代碼運(yùn)行結(jié)果

計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-505192.html

到了這里,關(guān)于計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【計(jì)算機(jī)圖形學(xué)】圖形變換(平移變換、比例變換、旋轉(zhuǎn)變換、對(duì)稱變換、錯(cuò)切變換、復(fù)合變換)

    【計(jì)算機(jī)圖形學(xué)】圖形變換(平移變換、比例變換、旋轉(zhuǎn)變換、對(duì)稱變換、錯(cuò)切變換、復(fù)合變換)

    一 實(shí)驗(yàn)?zāi)康?編寫圖形各種變換的算法 二 實(shí)驗(yàn)內(nèi)容 1 :自行設(shè)計(jì)基本圖案,完成1-5種簡(jiǎn)單變換 實(shí)驗(yàn)結(jié)果如下圖所示: 圖形初始化: 第一次點(diǎn)擊左鍵,實(shí)現(xiàn)平移變換: ? ? 第二次點(diǎn)擊左鍵,實(shí)現(xiàn)比例變換(同時(shí)伴有平移變換): ? 第三次點(diǎn)擊左鍵,實(shí)現(xiàn)對(duì)稱變換(以平行

    2024年02月05日
    瀏覽(28)
  • 【計(jì)算機(jī)圖形學(xué)01】坐標(biāo)變換

    【計(jì)算機(jī)圖形學(xué)01】坐標(biāo)變換

    ?????????將坐標(biāo)變換為標(biāo)準(zhǔn)化設(shè)備坐標(biāo),接著再轉(zhuǎn)化為屏幕坐標(biāo)的過(guò)程通常是分步進(jìn)行的,也就是類似于流水線那樣子。在流水線中,物體的頂點(diǎn)在最終轉(zhuǎn)化為屏幕坐標(biāo)之前還會(huì)被變換到多個(gè)坐標(biāo)系統(tǒng)(Coordinate System)。將物體的坐標(biāo)變換到幾個(gè) 過(guò)渡 坐標(biāo)系(Intermediate Coor

    2024年02月10日
    瀏覽(22)
  • 計(jì)算機(jī)圖形學(xué)(三) -- 3D 變換

    計(jì)算機(jī)圖形學(xué)(三) -- 3D 變換

    同樣引入齊次坐標(biāo): 3D 點(diǎn) = ( x , y , z , 1 ) T (x, y, z, 1)^T ( x , y , z , 1 ) T 3D 向量 = ( x , y , z , 0 ) T (x, y, z, 0)^T ( x , y , z , 0 ) T 通常, ( x , y , z , w ) (x, y, z, w) ( x , y , z , w ) (w != 0) 表示一個(gè)坐標(biāo)為 ( x / w , y / w , z / w ) (x/w, y/w, z/w) ( x / w , y / w , z / w ) 的 3D 點(diǎn) 用一個(gè) 4x4 的矩陣來(lái)表示

    2024年02月08日
    瀏覽(27)
  • 計(jì)算機(jī)圖形學(xué) | 變換與觀察

    計(jì)算機(jī)圖形學(xué) | 變換與觀察

    華中科技大學(xué)《計(jì)算機(jī)圖形學(xué)》課程 MOOC地址:計(jì)算機(jī)圖形學(xué)(HUST) 回顧幾何階段 整體流程: 這其中存在3種變換: 坐標(biāo)系的變換 模型本身的運(yùn)動(dòng) 觀察者的運(yùn)動(dòng) 幾何變換 以上各種變換都可以通過(guò)以下變換的復(fù)合來(lái)計(jì)算: 平移 比例 旋轉(zhuǎn) 對(duì)稱 錯(cuò)切 圖形的幾何變換是指對(duì)圖

    2023年04月27日
    瀏覽(24)
  • 【計(jì)算機(jī)圖形學(xué)】圖形變換(以任意直線為對(duì)稱軸的對(duì)稱變換)

    【計(jì)算機(jī)圖形學(xué)】圖形變換(以任意直線為對(duì)稱軸的對(duì)稱變換)

    模塊3-2 圖形變換 一 實(shí)驗(yàn)?zāi)康?編寫圖形各種變換的算法 二 實(shí)驗(yàn)內(nèi)容 1 :任意直線的對(duì)稱變換。要求將變換矩陣寫在實(shí)驗(yàn)報(bào)告中,并與代碼匹配。求對(duì)任意直線Ax+By+C=0的對(duì)稱變換矩陣。 實(shí)驗(yàn)結(jié)果如下圖所示: 1:預(yù)設(shè)圖形初始化 2:鼠標(biāo)左鍵點(diǎn)擊直線起點(diǎn) 3:鼠標(biāo)右鍵點(diǎn)擊直線

    2024年02月01日
    瀏覽(55)
  • 計(jì)算機(jī)圖形學(xué)基礎(chǔ):2D/3D坐標(biāo)變換(Transformation)

    計(jì)算機(jī)圖形學(xué)基礎(chǔ):2D/3D坐標(biāo)變換(Transformation)

    本文講解了2D變換和3D變換式如何用矩陣表示的 如何將線性和非線性變換進(jìn)行一個(gè)統(tǒng)一表示形式 三維物體在二維空間上的映射 表示向量添加了一維,分別表示單位距離和平移不變形的方向 旋轉(zhuǎn)默認(rèn)都是以(0, 0)為中心

    2023年04月08日
    瀏覽(24)
  • 計(jì)算機(jī)圖形圖像技術(shù)(OpenCV核心功能、圖像變換與圖像平滑處理)

    計(jì)算機(jī)圖形圖像技術(shù)(OpenCV核心功能、圖像變換與圖像平滑處理)

    1、顯示圖像 ①功能:在指定窗口中顯示圖像。 ②參數(shù): name 為窗口的名字; image 為待顯示的圖像。 ③說(shuō)明:可顯示彩色或灰度的字節(jié)圖像和浮點(diǎn)數(shù)圖像,彩色圖像數(shù)據(jù)按BGR順序存儲(chǔ)。 2、讀入圖像 ①功能:從指定文件讀入圖像。 ②參數(shù): filename 為圖像文件名,支持BMP、

    2024年02月03日
    瀏覽(32)
  • 計(jì)算機(jī)圖形學(xué):詳解法線與法線貼圖原理

    計(jì)算機(jī)圖形學(xué):詳解法線與法線貼圖原理

    ?再游戲中,渲染多面是比較消耗性能的,法線貼圖可以讓在一張平面圖片上面模擬出凹凸的效果 首先看下wiki上的解釋: 在三維計(jì)算機(jī)圖形學(xué)中,法線貼圖(英語(yǔ):Normal mapping)是一種模擬凹凸處光照效果的技術(shù),是凸凹貼圖的一種實(shí)現(xiàn)。法線貼圖可以在不添加多邊形的前提

    2023年04月09日
    瀏覽(18)
  • 計(jì)算機(jī)視覺--距離變換算法的實(shí)戰(zhàn)應(yīng)用

    計(jì)算機(jī)視覺--距離變換算法的實(shí)戰(zhàn)應(yīng)用

    前言: Hello大家好,我是Dream。 計(jì)算機(jī)視覺CV是人工智能一個(gè)非常重要的領(lǐng)域 。 在本次的距離變換任務(wù)中,我們將使用 D4距離度量方法 來(lái)對(duì)圖像進(jìn)行處理。通過(guò)這次實(shí)驗(yàn),我們可以更好地理解距離度量在計(jì)算機(jī)視覺中的應(yīng)用。希望大家對(duì)計(jì)算機(jī)視覺和圖像處理有了更深入的

    2024年02月15日
    瀏覽(25)
  • Part1:使用 TensorFlow 和 Keras 的 NeRF計(jì)算機(jī)圖形學(xué)和深度學(xué)習(xí)——計(jì)算機(jī)圖形學(xué)世界中相機(jī)的工作原理

    Part1:使用 TensorFlow 和 Keras 的 NeRF計(jì)算機(jī)圖形學(xué)和深度學(xué)習(xí)——計(jì)算機(jī)圖形學(xué)世界中相機(jī)的工作原理

    是否有一種方法可以僅從一個(gè)場(chǎng)景多張不同視角的照片中捕獲整個(gè)3D場(chǎng)景? 有。 NeRF:將場(chǎng)景表示為用于視圖合成的神經(jīng)輻射場(chǎng)中(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis),Mildenhall等人(2020)的論文解答了這個(gè)問(wèn)題。NeRF的更簡(jiǎn)單實(shí)現(xiàn)贏得了 TensorFlow社區(qū)聚光

    2024年02月07日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包