




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、二維變換學(xué)習(xí)如何使圖形運(yùn)動(dòng)平移變換、旋轉(zhuǎn)變換和放縮學(xué)會(huì)復(fù)雜變換的分解與合成學(xué)會(huì)使用OpenGL的幾何變換函數(shù)本章目標(biāo)數(shù)學(xué)基礎(chǔ)二維幾何變換齊次坐標(biāo)復(fù)合變換其它變換三維幾何變換圖形對(duì)象的幾何變換OpenGL的幾何變換函數(shù)主要內(nèi)容矢量(vector)連接兩個(gè)點(diǎn)的有向線段。又稱向量行向量和列向量?jī)煞N表示矢量和數(shù)學(xué)基礎(chǔ)矢量的數(shù)乘矢量的點(diǎn)積運(yùn)算性質(zhì)數(shù)學(xué)基礎(chǔ)矢量的長(zhǎng)度單位矢量 矢量間的夾角矢量的叉積右手法則數(shù)學(xué)基礎(chǔ)矩陣(Matrix)mn 階矩陣n階方陣(mn)單位矩陣 n階方陣,對(duì)角線元素為1, 其它元素為0數(shù)學(xué)基礎(chǔ)矩陣(續(xù))行向量與列向量當(dāng)m1時(shí),A退化為行向量a11, a12, , a1n當(dāng)n1時(shí),
2、A退化為列向量a11, a21, , am1T矩陣的加法 A=(aij)mn,B(bij) mnA與B的和記為AB性質(zhì):結(jié)合律和交換律數(shù)學(xué)基礎(chǔ)矩陣(續(xù))矩陣的數(shù)乘 矩陣的乘法 性質(zhì):結(jié)合律和分配律(不滿足交換律)數(shù)學(xué)基礎(chǔ)矩陣(續(xù))矩陣的轉(zhuǎn)置 矩陣的逆n階方陣A是可逆的,若存在另一個(gè)n階方陣B,使得 ABBAIn,稱B是A的逆陣,記為BA1數(shù)學(xué)基礎(chǔ)平移變換 (translation transformation)將點(diǎn)P(x, y)在x軸方向、y軸方向分別平移距離tx,ty,得到點(diǎn)P(x, y),則記為:T(tx , ty)矩陣表示:二維幾何變換旋轉(zhuǎn)變換(rotation transformati
3、on)如點(diǎn)P(x, y)的極坐標(biāo)表示(r為P 到原點(diǎn)的距離)繞坐標(biāo)原點(diǎn)(稱為參照點(diǎn),基準(zhǔn)點(diǎn))旋轉(zhuǎn)角度 (逆時(shí)針為正,順時(shí)針為負(fù))二維幾何變換旋轉(zhuǎn)變換(續(xù))記為:R()矩陣表示為:二維幾何變換放縮變換(scaling transformation)將點(diǎn)P(x, y)在x方向, y方向分別放縮 sx 和 sy 倍,得到點(diǎn)P(x, y)以坐標(biāo)原點(diǎn)為放縮參照(基準(zhǔn))點(diǎn)不僅改變了物體的大小和形狀,也改變了它離原點(diǎn)的距離記為:S(sx, sy)二維幾何變換利用矩陣計(jì)算變換后的坐標(biāo)時(shí),平移、旋轉(zhuǎn)和放縮變換分別為:運(yùn)算不統(tǒng)一,如何統(tǒng)一運(yùn)算?二維幾何變換為什么需要齊次坐標(biāo)?齊次坐標(biāo)就是將一個(gè)原本是n維的向量用一
4、個(gè)n+1維向量來(lái)表示。例如,二維點(diǎn)(x,y)的齊次坐標(biāo)表示為(hx,hy,h)。由此可以看出,一個(gè)向量的齊次表示是不唯一的,齊次坐標(biāo)的h取不同的值都表示的是同一個(gè)點(diǎn),比如齊次坐標(biāo)(8,4,2)、(4,2,1)表示的都是二維點(diǎn)(4,2)齊次坐標(biāo)為什么需要齊次坐標(biāo)?對(duì)多個(gè)點(diǎn)計(jì)算多次不同的變換時(shí),分別利用矩陣計(jì)算各變換導(dǎo)致計(jì)算量大運(yùn)算表示形式不統(tǒng)一平移為“”旋轉(zhuǎn)和放縮為“”統(tǒng)一運(yùn)算形式后,可以先合成變換運(yùn)算的矩陣,再作用于圖形對(duì)象齊次坐標(biāo)定義 Homogeneous Coordinate(x,y)點(diǎn)對(duì)應(yīng)的齊次坐標(biāo)定義為(x,y)點(diǎn)對(duì)應(yīng)的齊次坐標(biāo)為三維空間的一條直線 標(biāo)準(zhǔn)齊次坐標(biāo)(x,y,1)h0表示
5、無(wú)窮遠(yuǎn)點(diǎn)齊次坐標(biāo)二維變換的矩陣表示平移變換旋轉(zhuǎn)變換齊次坐標(biāo)放縮變換變換具有統(tǒng)一表示形式的優(yōu)點(diǎn)便于變換合成連續(xù)變換時(shí),可以先得到變換的矩陣便于硬件實(shí)現(xiàn)齊次坐標(biāo)變換的性質(zhì)平移和旋轉(zhuǎn)變換具有可加性放縮變換具有可乘性齊次坐標(biāo)逆變換逆平移變換:正平移距離tx,ty逆旋轉(zhuǎn)變換:旋轉(zhuǎn)角度為齊次坐標(biāo)逆放縮變換:放縮系數(shù)為sx和sy齊次坐標(biāo)變換合成方法:連續(xù)變換時(shí),先計(jì)算變換矩陣,再計(jì)算坐標(biāo)優(yōu)點(diǎn):(1)提高了對(duì)圖形依次做多次變換的運(yùn)算效率如:圖形上有n個(gè)頂點(diǎn)Pi,如果依次施加的變換為T,R,那么頂點(diǎn)Pi 變換后的坐標(biāo)為每個(gè)頂點(diǎn)需要2次矩陣相乘只需要1次矩陣相乘復(fù)合變換變換合成(續(xù))(2)提供構(gòu)造復(fù)雜變換的方法
6、對(duì)圖形作較復(fù)雜的變換時(shí),不直接去計(jì)算這個(gè)變換,而是將其先分解成多個(gè)基本變換,再合成總的變換復(fù)合變換Composite transformation多個(gè)變換的組合可通過(guò)單個(gè)變換矩陣來(lái)計(jì)算矩陣乘積復(fù)合變換連續(xù)平移變換平移向量為(t1x,t1y)和(t2x,t2y)點(diǎn)P 經(jīng)變換為P,則有復(fù)合矩陣復(fù)合平移變換連續(xù)旋轉(zhuǎn)P 經(jīng)連續(xù)旋轉(zhuǎn)角度分別為 1 和 2 后連續(xù)旋轉(zhuǎn)具有相加性復(fù)合旋轉(zhuǎn)變換連續(xù)放縮連續(xù)放縮因子分別為:(s1x, s1y) 和 (s2x, s2y)復(fù)合放縮變換關(guān)于任意參照點(diǎn) 的旋轉(zhuǎn)變換步驟:(1)平移對(duì)象使參照(基準(zhǔn))點(diǎn)移到原點(diǎn)(2)繞坐標(biāo)原點(diǎn)旋轉(zhuǎn)(3)平移對(duì)象使基準(zhǔn)點(diǎn)回到原始位置二維基準(zhǔn)點(diǎn)
7、旋轉(zhuǎn)關(guān)于任意參照點(diǎn) 的放縮變換 步驟:(1)平移對(duì)象使基準(zhǔn)點(diǎn)與坐標(biāo)原點(diǎn)重合(2)放縮變換(3)反向平移使得基準(zhǔn)點(diǎn)回到初始位置二維基準(zhǔn)點(diǎn)放縮變換合成時(shí),矩陣相乘的順序單次變換:列向量表示點(diǎn)復(fù)合變換:先作用的放在連乘的右端,后作用的放在連乘的左端點(diǎn)表示成行向量呢?小結(jié)對(duì)稱變換(反射變換、鏡像變換:reflection)(1)關(guān)于 x 軸的對(duì)稱變換(2)關(guān)于 y 軸的對(duì)稱變換 其它變換(3)關(guān)于任意軸的對(duì)稱變換平移(tx, ty)使l 過(guò)坐標(biāo)原點(diǎn),記為T1旋轉(zhuǎn),記R1對(duì)稱, 記SYx旋轉(zhuǎn)-,記 R2平移(-tx, -ty), 記T2總變換:T2R2 SYxR1 T1其它變換錯(cuò)切變換(shear)依賴
8、軸:坐標(biāo)保持不變的坐標(biāo)軸,又稱參考軸方向軸:余下的坐標(biāo)軸1、以y 軸為依賴軸的錯(cuò)切變換 (1)以 y = 0為參考軸(坐標(biāo)保持不變)Shx是對(duì)y=1上的點(diǎn)沿x軸移動(dòng)的距離其它變換(2)以 y = yref 為參考軸x = x + shx ( y yref)y = y其它變換2、以x軸為依賴軸的錯(cuò)切變換其它變換仿射變換affine transformation二維線性變換的一般形式平移,旋轉(zhuǎn),放縮,對(duì)稱和錯(cuò)切是特例特點(diǎn):保持平行線間的平行關(guān)系其它變換例:證明二維復(fù)合變換的矩陣總能表示為: 證明:其它變換圖形對(duì)象點(diǎn),線段,多邊形,圓,字符方法先生成點(diǎn)集,再對(duì)其中的點(diǎn)進(jìn)行變換運(yùn)算量大對(duì)參數(shù)變換線段:
9、兩個(gè)端點(diǎn)多邊形:各頂點(diǎn)圓:圓心和半徑前提圖形對(duì)象的幾何表示不發(fā)生變化圖形對(duì)象的幾何變換說(shuō)明在核心庫(kù)中,每種幾何變換是一個(gè)獨(dú)立的函數(shù)所有變換都是在三維坐標(biāo)系中定義基本幾何變換函數(shù)平移函數(shù):glTranslatefd(tx, ty, tz)對(duì)二維變換而言,取tz0旋轉(zhuǎn)函數(shù):glRotatefd(theta, vx, vy, vz)向量(vx, vy, vz)為通過(guò)坐標(biāo)原點(diǎn)旋轉(zhuǎn)軸theta為旋轉(zhuǎn)角的度數(shù)放縮函數(shù):glScalefd(sx, sy, sz)相對(duì)坐標(biāo)原點(diǎn)的縮放當(dāng)參數(shù)為負(fù)時(shí),相對(duì)于平面進(jìn)行對(duì)稱變換OpenGL 幾何變換函數(shù)例程序 6-1void display (void) glColor
10、3f (0.0, 0.0, 1.0); glRecti (20, 50, 100, 80); glColor3f (1.0, 0.0, 0.0); glTranslatef (-120.0, -40.0, 0.0); glRecti (20, 50, 100, 80); glLoadIdentity ( ); glColor3f (1.0, 0.0, 1.0); glRotatef (135.0, 0.0, 0.0, 1.0);glRecti (20, 50, 100, 80); glLoadIdentity ( ); glColor3f ( 0.0, 1.0,0.0); glScalef (
11、0.5, -1.0, 1.0); glRecti (20, 50, 100, 80); glColor3f(0,0,0); glLoadIdentity ( ); glBegin(GL_LINES); glVertex2i(0,-Y/2+5); glVertex2i(0,Y/2-5); glVertex2i(X/2-5,0); glVertex2i(-X/2+5,0); glEnd(); glutSwapBuffers();注意:幾何變換矩陣只有1個(gè)OpenGL幾何變換函數(shù)例6-1(續(xù))#include #include #include int X=0,Y=0;void Reshape(in
12、t width, int height) glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-width/2, width/2, -height/2, height/2); glMatrixMode(GL_MODELVIEW);/定義模型觀察變換矩陣 glLoadIdentity(); glClear (GL_COLOR_BUFFER_BIT); X=width, Y=height;void init (void) glClearColor (1.0, 1.0,
13、1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 250.0, 0.0, 250.0);OpenGL幾何變換函數(shù)(續(xù))int main(int argc, char* argv) glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (300, 300); glutCreateWindow (Transformation); init ();
14、glutDisplayFunc(display); glutReshapeFunc(Reshape); glutMainLoop(); return 0;OpenGL幾何變換函數(shù)矩陣操作模型觀察矩陣:glMatrixMode(GL_MODELVIEW)建立當(dāng)前觀察矩陣還有兩種方式:紋理和顏色模式,默認(rèn)為觀察模式設(shè)置當(dāng)前矩陣為單位矩陣:glLoadIdentity()矩陣棧4種:觀察、投影、紋理初始狀態(tài)下,每棧僅包含一單位棧壓棧:glPushMatrix()出棧:glPopMatrix()OpenGL幾何變換函數(shù)機(jī)器人手臂#include #define BASE_HEIGHT 2.0#defi
15、ne BASE_RADIUS 1.0#define LOWER_ARM_HEIGHT 5.0#define LOWER_ARM_WIDTH 0.5#define UPPER_ARM_HEIGHT 5.0#define UPPER_ARM_WIDTH 0.5typedef float point3;GLfloat theta = 0.0,0.0,0.0;GLint axis = 0;GLUquadricObj *p; /* pointer to quadric(二次曲面) object */void myinit() glClearColor(1.0, 1.0, 1.0, 1.0); glCol
16、or3f(1.0, 0.0, 0.0); p=gluNewQuadric(); /* allocate quadric object */ gluQuadricDrawStyle(p, GLU_LINE); /* render it as wireframe */OpenGL幾何變換函數(shù)例62(續(xù))void base() glPushMatrix();/* rotate cylinder to align with y axis */ glRotatef(-90.0, 1.0, 0.0, 0.0);/* cyliner aligned with z axis*/ gluCylinder(p,
17、BASE_RADIUS, BASE_RADIUS, BASE_HEIGHT, 5, 5); glPopMatrix();void upper_arm() glPushMatrix(); glTranslatef(0.0, 0.5*UPPER_ARM_HEIGHT, 0.0); glScalef(UPPER_ARM_WIDTH, UPPER_ARM_HEIGHT, UPPER_ARM_WIDTH); glutWireCube(1.0); glPopMatrix();void lower_arm() glPushMatrix(); glTranslatef(0.0, 0.5*LOWER_ARM_H
18、EIGHT, 0.0); glScalef( LOWER_ARM_WIDTH, LOWER_ARM_HEIGHT, LOWER_ARM_WIDTH); glutWireCube(1.0); glPopMatrix();OpenGL幾何變換函數(shù)void display(void)/* Accumulate ModelView Matrix as we traverse tree */ glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); glRotatef(theta0, 0.0, 1.0, 0.0);
19、 base(); glTranslatef(0.0, BASE_HEIGHT, 0.0); glRotatef(theta1, 0.0, 0.0, 1.0); lower_arm(); glTranslatef(0.0, LOWER_ARM_HEIGHT, 0.0); glRotatef(theta2, 0.0, 0.0, 1.0); upper_arm(); glutSwapBuffers();void mouse(int btn, int state, int x, int y)/* left button increase joint angle, right button decrea
20、ses it */if(btn=GLUT_LEFT_BUTTON & state = GLUT_DOWN)thetaaxis += 5.0; if( thetaaxis 360.0 ) thetaaxis -= 360.0;if(btn=GLUT_RIGHT_BUTTON & state = GLUT_DOWN) thetaaxis -= 5.0; if( thetaaxis 360.0 ) thetaaxis += 360.0; display();OpenGL幾何變換函數(shù)void menu(int id)/* menu selects which angle to change or wh
21、ether to quit */ if(id = 1 ) axis=0; if(id = 2) axis=1; if(id = 3 ) axis=2; if(id =4 ) exit(0);void myReshape(int w, int h) glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho(-10.0, 10.0, -5.0 * (GLfloat) h / (GLfloat) w, 15.0 * (GLfloat) h / (GLfloat) w, -10.0
22、, 10.0); else glOrtho(-10.0 * (GLfloat) w / (GLfloat) h, 10.0 * (GLfloat) w / (GLfloat) h, -5.0, 15.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();OpenGL幾何變換函數(shù)void main(int argc, char *argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindo
23、wSize(500, 500); glutCreateWindow(robot); myinit(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutCreateMenu(menu); glutAddMenuEntry(base, 1); glutAddMenuEntry(lower arm, 2); glutAddMenuEntry(upper arm, 3); glutAddMenuEntry(quit, 4); glutAttachMenu(GLUT_MIDDLE_BUTTO
24、N); glutMainLoop();OpenGL幾何變換函數(shù)使用雙緩沖以GLUT_DOUBLE為參數(shù)調(diào)用glutInitDisplayMode,設(shè)置雙緩存的窗口模式在顯示回調(diào)函數(shù)的最后調(diào)用glutSwapBuffers()函數(shù)空閑函數(shù)(回調(diào)函數(shù))定義:如 void spinCube()功能:程序不受用戶干預(yù)時(shí)執(zhí)行spinCube()函數(shù)注冊(cè):glutIdleFunc(spinCube) (在main函數(shù)中調(diào)用)重繪制函數(shù)glutPostRedisplay()OpenGL幾何變換函數(shù)旋轉(zhuǎn)的立方體8個(gè)頂點(diǎn)的顏色不同不停地旋轉(zhuǎn)鼠標(biāo)控制改變方向#include #include /定義頂點(diǎn)坐標(biāo)和顏色
25、GLfloat vertices3 = -1.0,-1.0,-1.0,1.0,-1.0,-1.0, 1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0;GLfloat colors3 = 0.0,0.0,0.0,1.0,0.0,0.0, 1.0,1.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0, 0.0,1.0,1.0; OpenGL幾何變換函數(shù)void polygon(int a, int b, int c
26、, int d)/* draw a polygon via list of vertices */ glBegin(GL_POLYGON); glColor3fv(colorsa); glVertex3fv(verticesa); glColor3fv(colorsb); glVertex3fv(verticesb); glColor3fv(colorsc); glVertex3fv(verticesc); glColor3fv(colorsd); glVertex3fv(verticesd); glEnd();void colorcube(void)/* map vertices to fa
27、ces */polygon(0,3,2,1);polygon(2,3,7,6);polygon(0,4,7,3);polygon(1,2,6,5);polygon(4,5,6,7);polygon(0,1,5,4);OpenGL幾何變換函數(shù)static GLfloat theta = 0.0,0.0,0.0;static GLint axis = 2;void display(void) /* display callback, clear frame buffer and z buffer, rotate cube and draw, swap buffers */ glClear(GL_C
28、OLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(theta0, 1.0, 0.0, 0.0); glRotatef(theta1, 0.0, 1.0, 0.0); glRotatef(theta2, 0.0, 0.0, 1.0); colorcube(); glutSwapBuffers();void spinCube()/* Idle callback, spin cube 2 degrees about selected axis */ thetaaxis += 2.0; if( thetaaxis 3
29、60.0 ) thetaaxis -= 360.0;/* display(); */ glutPostRedisplay();OpenGL幾何變換函數(shù)void mouse(int btn, int state, int x, int y)/* mouse callback, selects an axis about which to rotate */ if(btn=GLUT_LEFT_BUTTON & state = GLUT_DOWN) axis = 0; if(btn=GLUT_MIDDLE_BUTTON & state = GLUT_DOWN) axis = 1; if(btn=GL
30、UT_RIGHT_BUTTON & state = GLUT_DOWN) axis = 2;void myReshape(int w, int h) glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w, 2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); else glOrtho(-2.0 * (GLfloat) w / (GLfloat) h, 2.0 * (GLfloat) w / (GLfl
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度民族風(fēng)情餐廳承包運(yùn)營(yíng)合同
- 二零二五年度土地流轉(zhuǎn)與農(nóng)村社會(huì)保障體系建設(shè)協(xié)議
- 2025年度環(huán)保產(chǎn)業(yè)員工勞動(dòng)關(guān)系解除協(xié)議
- 二零二五年度黃金投資俱樂部會(huì)員招募合同
- 2025年度門面房屋租賃合同-含租賃房屋租賃稅費(fèi)承擔(dān)
- 黨支部競(jìng)選發(fā)言稿
- 2025年黃南貨運(yùn)資格證模擬考試題
- 2025年上海貨運(yùn)上崗證模擬考試題
- 羽毛球比賽發(fā)言稿
- 個(gè)人商鋪門面租賃合同
- 中職語(yǔ)文必考文言文15篇
- 2024-2028年蒸汽發(fā)電機(jī)市場(chǎng)發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測(cè)報(bào)告
- 光伏電站巡檢記錄表完整
- 高血壓患者不遵醫(yī)飲食行為的原因分析及對(duì)策
- 《團(tuán)隊(duì)的凝聚力》課件
- 膝關(guān)節(jié)僵硬個(gè)案護(hù)理
- 復(fù)工復(fù)產(chǎn)檢查 清單
- 《民間皮影》課程標(biāo)準(zhǔn)
- 統(tǒng)編版一年級(jí)語(yǔ)文下冊(cè)部編版第六單元單元教材解讀(素材)(課件)
- 新教科版六下科學(xué)1.4《設(shè)計(jì)塔臺(tái)模型》教學(xué)設(shè)計(jì)(新課標(biāo))
- (2024版)計(jì)算機(jī)程序設(shè)計(jì)員三級(jí)備考試題庫(kù)-上(單選題匯總)
評(píng)論
0/150
提交評(píng)論