首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手散分:关于基础图形的有关问题

2012-03-20 
新手散分:关于基础图形的问题这是一个朋友课程设计的题,我对C++不太懂,还得壮着胆子给他做,不怕丢人在这请

新手散分:关于基础图形的问题
这是一个朋友课程设计的题,我对C++不太懂,还得壮着胆子给他做,不怕丢人
在这请高手们指导下,帮着写点代码.小弟在这先谢谢了

题目是这样的:实现实线直线,矩形,圆形,正余旋曲线等基本图形元素的绘制,并要给出该图元的几何特征,既何种图形,长度或周长,或面积多少等信息,要求用类,操作提示简明明了.

我也不会啊,就大概写了点,就当是算法了
#include "stdafx.h "
#include "iihgraphics.h "

using   namespace.iih;

class   line{
line(int   x1,int   y1,int   x2,int   y2);//线段的函数
int   l;//l为周长
l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)0;
}
class   rectangle{       //矩形
rectangle(int   x1,int   y1,int   x2,int   y2);//矩形的函数其中x1y1为左上角坐标
int   c,s;//c为周长,s为面积
c=2*((x1-x2)+(y1+y2));//好像应该用绝对值
s=(x1-x2)*(y1-y2);
}
class   circular{
const   float   PI=3.14159;
ellipse(int   x1,int   y1,int   x2,int   y2);
//椭圆和圆的原函数,其中坐标为外接矩形的左上角和右下角坐标,这个比较笨,没找到圆的~~~
int   c,s;
c=PI*(x1-x2);
s=PI*(x1-x2)/2;
}
正余旋的没找到,不知道怎么写,类这个东西我不会,对题目的理解也不知道对不对
请高手给点启示,小弟在此感激不尽.

[解决办法]
using namespace.iih;
这里的“.”是干什么的?

还有,
class line{
line(int x1,int y1,int x2,int y2);//线段的函数
int l;//l为周长
l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)0;
}
这里,你的“l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)0;”应该是个成员函数,而且l是“险段的长度”,而非“周长”。如果你经常取用线段长度,则可以向你写得那样,将l作为一个私有成员,如果l被取用的几率很小,则没必要设置私有成员,完全可以“在需要时计算”,即所谓的“lazy evaluation”。

其他的也都类似了。
[解决办法]
基本作图:(楼主再根据这个思想,封装成类即可)

#include "stdio.h "
#include "graphics.h "

#define u 0.25

void line1(int xa, int ya, int xb, int yb) /*画线函数*/
{
float delta_x,delta_y,x,y;
int dx,dy,steps,k;
dx=xb-xa;
dy=yb-ya;
if(abs(dx)> abs(dy))
steps=abs(dx);
else steps=abs(dy);
delta_x=(float)dx/(float)steps;
delta_y=(float)dy/(float)steps;
x=xa;
y=ya;
putpixel(x,y,3);
for(k=1;k <=steps;k++)
{ x+=delta_x;
y+=delta_y;
putpixel(x,y,3);
}
}

void circle1(int xc1,int yc1,int r) /*画圆函数*/
{ int x1,y1,p,c;
c=3;
x1=0;
y1=r;
p=3-2*r;
while(x1 <y1){
plot_circle_points(xc1,yc1,x1,y1,c);/*调用画点函数*/
if(p <0) p=p+4*x1+6;
else{
p=p+4*(x1-y1)+10;
y1-=1;
}
x1+=1;
}
if(x1==y1) plot_circle_points(xc1,yc1,x1,y1,c);
}

int plot_circle_points(int xc,int yc,int x,int y,int c) /*画点函数*/
{ putpixel(xc+x,yc+y,c);
putpixel(xc-x,yc+y,c);
putpixel(xc+x,yc-y,c);
putpixel(xc-x,yc-y,c);
putpixel(xc+y,yc+x,c);
putpixel(xc-y,yc+x,c);
putpixel(xc+y,yc-x,c);
putpixel(xc-y,yc-x,c);
}

void drawline() /*画线前的提示处理函数*/
{int x1,y1,x2,y2;
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd, &gm, " ");
printf( "\n\n*******************This is drawing a line display platform********************** ");
printf( "\n\n\n\n\tplease input two points(X(i),Y(j)): ");
scanf( "%d,%d,%d,%d ",&x1,&y1,&x2,&y2);
initgraph(&gd,&gm, " ");
cleardevice();
line1(x1,y1,x2,y2);
getch();
closegraph();
}
void drawcircle() /*画圆前的提示处理函数*/
{int x1,y1,r;
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd, &gm, " ");


printf( "\n\n*******************This is drawing a circle display platform******************** ");
printf( "\n\n\n\n\tplease input(ruan xin he ban jin zuo bian): ");
scanf( "%d,%d,%d ",&x1,&y1,&r);
initgraph(&gd, &gm, " ");
cleardevice();
circle1(x1,y1,r);
getch();
closegraph();
}
void Bezier1(int color,int p[4][2]) /*画Bezier曲线函数*/
{ double t,t1,t2,xt,yt;
int rate=200,x,y;
setcolor(color);
moveto(p[0][0],p[0][1]);
for (t=0;t <=1;t+=1.0/rate)
{ yt=1-t;
t1=yt*yt;
t2=3*yt*t;
xt=p[0][0]*yt*t1+p[1][0]*t2*yt+p[2][0]*t2*t+p[3][0]*t*t*t;
yt=p[0][1]*yt*t1+p[1][1]*t2*yt+p[2][1]*t2*t+p[3][1]*t*t*t;
x=(int)(xt);
y=(int)(yt);
lineto(x,y);
}
}

void drawBezier() /*画Bezier曲线前的提示处理函数*/
{ int p[4][2];
int N0=4; /* 特征顶点个数*/
int i,j;
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm, " ");
printf( "\n\n\t\tthe system of Bezier bended line \n ");
printf( "\n\n please input this four point(X(i),Y(i)): ");
for(i=0;i <N0;i++)
scanf( "%d,%d ",&p[i][0],&p[i][1]);
initgraph(&gd,&gm, " ");
cleardevice();
setcolor(YELLOW);
moveto(p[0][0],p[0][1]);
for (i=1;i <N0;i++) lineto(p[i][0],p[i][1]);
Bezier1(LIGHTRED,p);
getch();
closegraph();
}

void duobianxing() /*画多边形的函数*/
{int i,m,n,x[20];
int gd = DETECT,gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd, &gm, " ");
for(i=0;i <20;i++) x[i]=0; /*多边形的最多的边数为10条边*/
printf( "\n\n\tThis is drawing a duobianxing graph display platform\n\n ");
printf( "\tplease input duobianxing 's edge number: ");
scanf( "%d ",&n);
getchar();
printf( "\n\tplease input duobianxing de ge dian zuo biao:\n\n ");
printf( " please input this %d point(X(i) Y(i)): ", n);
m=0;
for(i=0;i <2*n;i++) /*接受多边的顶点坐标*/
{
scanf( "%d ",&x[i]);
m++;
if(m> =10)
{printf( "extend the area!!!!! ");break;}
}
initgraph(&gd,&gm, " ");
cleardevice();
i=0;
while(i <2*n-3) /*依次连接各点是坐标使形成多边形*/
{line1(x[i],x[i+1],x[i+2],x[i+3]);
i+=2;
}
line1(x[0],x[1],x[2*n-2],x[2*n-1]);
getch();
closegraph();
}


void main()
{ char m;
int i;
int gd = DETECT, gm = 0; /*图形界面的初始化处理函数*/
registerbgidriver(EGAVGA_driver);
B: initgraph(&gd, &gm, " ");
cleardevice(); /*清屏函数*/
printf( "\n\n\n\t------------------The first graphics trials--------------------- ");
printf( "\t\t\thu bei min zu da xue---xin xi gong cheng xue yuan\n ");
printf( "\n\t\t\t\t\t\tname:********\n\t\t\t\t\t\tnumber:******* ");
printf( "\n\n\n\t\t1------two points to draw line\n ");
printf( "\t\t2------one point to draw circle\n ");
printf( "\t\t3------four points draw Bezier bend line\n ");
printf( "\t\t4------n points to draw duo bian xing\n\n ");
printf( "\t\t\tplease choose: ");
scanf( "%d ",&i);
getchar();
switch (i)
{ case 1:drawline();break;
case 2:drawcircle();break;
case 3:drawBezier();break;


case 4:duobianxing();break;
default:printf( "you choose fault! ");
}
printf( "\tcontiune???????\n\n\tyes-----\ "Enter\ "\t\tNo-----\ "q\ " ");
m=getch(); /*输入字符 "Q "时,程序退出*/
if(m== 'q ') exit(0);
else goto B;
}
[解决办法]
jixingzhong(星辰)给的代码都是的啊!

你还要什么?

问题 不是你同学说的那么简单
[解决办法]
没学过C++也敢用C++编程,汗呀.
[解决办法]
学习

热点排行