當前位置:首頁 » 操作系統 » 中心分割演算法

中心分割演算法

發布時間: 2023-02-12 18:14:00

㈠ 計算機圖形學:線段剪裁中點分割演算法,要求用C++做,急求源代碼啊,謝謝! 752512212

#include <GL/glut.h>#include <stdlib.h>#include "iostream.h"int x0,y0,x1,y1;int Max(int a,int b,int c){ if(a>b) { if(a>c) return a; else return c; } else { if(b>c) return b; else return c; }}int Min(int a,int b,int c){ if(a<b) { if(a<c) return a; else return c; } else { if(b<c) return b; else return c; }}void DrawLine1(int x0,int y0,int x1,int y1){ int d,temp; temp=y0; d=2*(y1-y0)-(x1-x0); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); for(int k=x0+1;k<x1;k++) { if(d>=0) { glBegin(GL_POINTS); glVertex2d(k,temp+1); glEnd(); d=d+2*(y1-y0)-2*(x1-x0); temp=temp+1; } else { glBegin(GL_POINTS); glVertex2d(k,temp); glEnd(); d=d+2*(y1-y0); temp=temp; } } glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd();}void DrawLine2(int x0,int y0,int x1,int y1){ int d,temp; temp=x0; d=2*(x1-x0)-(y1-y0); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); for(int k=y0+1;k<y1;k++) { if(d>=0) { glBegin(GL_POINTS); glVertex2d(temp+1,k); glEnd(); d=d+2*(x1-x0)-2*(y1-y0); temp=temp+1; } else { glBegin(GL_POINTS); glVertex2d(temp,k); glEnd(); d=d+2*(x1-x0); temp=temp; } } glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd();}void DrawTriangle(int x0,int y0,int x1,int y1,int x2,int y2){ int xmin,xmax,ymin,ymax; float a,b,c; xmin=Min(x0,x1,x2); xmax=Max(x0,x1,x2); ymin=Min(y0,y1,y2); ymax=Max(y0,y1,y2); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); glColor3f(0.0f,1.0f,0.0f); glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd(); glColor3f(0.0f,0.0f,1.0f); glBegin(GL_POINTS); glVertex2d(x2,y2); glEnd(); for(float n=ymin;n<=ymax;n++) for(float m=xmin;m<xmax;m++) { a=((y1-y2)*m+(x2-x1)*n+x1*y2-x2*y1)/((y1-y2)*x0+(x2-x1)*y0+x1*y2-x2*y1); b=((y2-y0)*m+(x0-x2)*n+x2*y0-x0*y2)/((y2-y0)*x1+(x0-x2)*y1+x2*y0-x0*y2); c=((y0-y1)*m+(x1-x0)*n+x0*y1-x1*y0)/((y0-y1)*x2+(x1-x0)*y2+x0*y1-x1*y0); if(a>0 && b>0 && c>0) { float color0=a*1.0; float color1=b*1.0; float color2=c*1.0; glColor3f(color0,color1,color2); glBegin(GL_POINTS); glVertex2d(m,n); glEnd(); } } }void display(){/* clear all pixels */ glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glBegin(GL_POINTS); glVertex2d(x,y); 中間是點的坐標 glEnd(); */ /*下面的語句是畫一個白色的正方形*/ if((y1-y0)/(x1-x0)<=1) { DrawLine1(x0,y0,x1,y1); } else { DrawLine2(x0,y0,x1,y1); } DrawTriangle(35,35,135,185,235,35);/* don't wait! * start processing buffered OpenGL routines */ glFlush ();}void init (void) {/* select clearing color */ glClearColor (0.0, 0.0, 0.0, 0.0);/* initialize viewing values */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, 600, 0, 600);}/* * Declare initial window size, position, and display mode * (single buffer and RGBA). Open window with "hello" * in its title bar. Call initialization routines. * Register callback function to display graphics. * Enter main loop and process events. */int main(int argc, char** argv){ cout<<"input x0,y0,x1,y1 :"<<endl; cin>>x0>>y0>>x1>>y1; glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); //設置窗口大小,以像素為單位 glutInitWindowSize (600, 600); glutInitWindowPosition (100, 100); glutCreateWindow ("hello");
希望能夠幫助到你,望採納,謝謝!

㈡ 跪求計算機圖形學 中點分割演算法 C程序

在MFC下 中點畫圓MidPointCirle(point.x,point.y,30,RGB(0,255,0));
函數如下:
void CCricleView::MidPointCirle(int x0,int y0,int r, COLORREF color)
{
CClientDC dc(this);
int x,y,d;
x=0;
y=r;
d=5-4*r;
CirclePoint(x0,y0,x,y,color);
while (x<=y)
{
if(d<=0) d+=8*x+12;
else {d+=8*(x-y)+20;y--;}
x++;
CirclePoint(x0,y0,x,y,color);
}
}
void CCricleView::CirclePoint(int x0,int y0,int x,int y,COLORREF color)
{
CClientDC dc(this);
dc.SetPixel(x0+x,y0+y,color);
dc.SetPixel(x0+x,y0-y,color);
dc.SetPixel(x0-x,y0+y,color);
dc.SetPixel(x0-x,y0-y,color);
dc.SetPixel(x0+y,y0+x,color);
dc.SetPixel(x0+y,y0-x,color);
dc.SetPixel(x0-y,y0+x,color);
dc.SetPixel(x0-y,y0-x,color);
}
中點畫線
void CLineView::MidPointLine(int x0, int y0, int x1, int y1, COLORREF crColor)
{
CClientDC dc(this);
int a,b,dt1,dt2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
dt1=2*(a+b);
dt2=2*a;
x=x0;y=y0;
dc.SetPixel(x,y,crColor);
while (x<x1)
{
if (d<0)
{
x++;
y++;
d+=dt1;
}
else
{
x++;
d+=dt2;
}
dc.SetPixel(x,y,crColor);
}
}

㈢ 圖形學中點分割梁友棟演算法是第幾章的是第幾章的

圖形學中點分割梁友棟演算法是第6章的是第2章。當前象素點為(xp, yp) 。下一個象素點可取為P1或P2。設M=(xp+1, yp+0.5),為P1與P2之中點,Q為理想直線與x=xp+1 垂線的交點。將Q與M的y坐標進行比較。各行各列象素中心構造一組虛擬網格線。按直線從起點到終點的順序計算直線與各垂直網格線的交點,然後根據誤差項的符號確定該列象素中與此交點最近的象素。所以,圖形學中點分割梁友棟演算法是第6章的是第2章的。

㈣ 分割演算法

x沒有定義就使用了,定義一下,
要不然把Seg=zeros(x,y)
那句話不要了,只是一個初始化的命令,好像可以不要

熱點內容
androidhome環境變數 發布:2025-07-25 22:38:37 瀏覽:123
魚站源碼 發布:2025-07-25 22:37:49 瀏覽:771
sql更新統計信息 發布:2025-07-25 22:23:58 瀏覽:866
風電場火災應急演練腳本 發布:2025-07-25 22:22:33 瀏覽:680
蘋果更新系統的密碼是什麼 發布:2025-07-25 22:07:40 瀏覽:480
遠程附加web伺服器開什麼埠 發布:2025-07-25 22:07:34 瀏覽:301
飛兒精品解壓密碼 發布:2025-07-25 22:01:27 瀏覽:587
域名怎麼連接伺服器 發布:2025-07-25 21:55:27 瀏覽:335
安卓手機怎麼刷ios系統 發布:2025-07-25 21:49:40 瀏覽:594
我的世界伺服器悠然小天 發布:2025-07-25 21:20:06 瀏覽:4