用c++程序输出图形,求高手写一个~

给定三点的坐标,画出三角形不用图形函数,用简单的星号表示~
2025-02-26 13:16:34
推荐回答(2个)
回答1:

这个参考下,还有点问题。画直线有个算法,我这个可能写错了.亲,觉得好就给我好评吧!

#include

#include

char temp[128][128];


 void DrawDot(int x,int y) //画点

 {

temp[x][y]='*';

 }


void DrawLine(int x1,int y1,int x2,int y2)//画线

   {

int x,y,ix,iy,inc,plotx=x1,ploty=y1,i;

int dx,dy;

char flag;

DrawDot(x1,y1);

x=0;y=0;

dx=x2-x1;

ix=abs(dx);

dy=y2-y1;

iy=abs(dy);

inc=ix>iy?ix:iy;

for(i=0;i<=inc;i++)

{

  x+=ix;

  y+=iy;

  flag=0;

  if(x>inc)

     {

   flag=1;

x-=inc;

if(dx> 0) plotx++;

if( dx<0) plotx--;

 }

   if(y>inc)

     {

   flag=1;

y-=inc;

if( dy>0) ploty++;

if( dy<0) ploty--;

 }

if(flag) DrawDot(plotx,ploty);


 }

   }

void showDalt()

{

int x,y;

for(x=0;x<128;x++)

{

 for(y=0;y<128;y++)

 putchar(temp[x][y]);

 printf("\n");

}

}


void main()

{    

int xa,ya,xb,yb,xc,yc;

printf("请输入A点:\n");

scanf("%d %d",&xa,&ya);


printf("请输入B点:\n");

scanf("%d %d",&xb,&yb);


printf("请输入C点:\n");

scanf("%d %d",&xc,&yc);

DrawLine(xa,ya,xb,yb);

DrawLine(xa,ya,xc,yc);

DrawLine(xb,yb,xc,yc);

showDalt();

}

回答2:

#include
#include
#include
static const int M = 50;
static const int N = 50;
char d[M][N] = {'\0'};
inline int delta(int x1, int x2)
{
return (x1 == x2 ? 0 : (x1 < x2 ? 1 : -1));
}
inline int near(double f)
{
return static_cast(f + 0.5);
}
void line(int x1, int y1, int x2, int y2)
{
int dx = delta(x1, x2);
int dy = delta(y1, y2);
if(x1 == x2)
{
for(; y1 != y2; y1 += dy)
{
d[y1][x1] = '*';
}
}
else if(y1 == y2)
{
for(; x1 != x2; x1 += dx)
{
d[y1][x1] = '*';
}
}
else if(abs(x1 - x2) < abs(y1 - y2))
{
double f = static_cast(abs(y1 - y2)) / abs(x1 - x2);
for(int x = x1; x != x2; x += dx)
{
d[near(y1 + f * dy * abs(x - x1))][x] = '*';
}
}
else
{
double f = static_cast(abs(x1 - x2)) / abs(y1 - y2);
for(int y = y1; y != y2; y += dy)
{
d[y][near(x1 + f * dx * abs(y - y1))] = '*';
}
}
}
void triangle(int x1, int y1, int x2, int y2, int x3, int y3)
{
line(x1, y1, x2, y2);
line(x2, y2, x3, y3);
line(x3, y3, x1, y1);
}
void ilu()
{
//i
line(0, 0, 3, 0);
line(1, 0, 1, 20);
line(0, 20, 3, 20);
//l
line(6, 0, 6, 20);
line(6, 20, 20, 20);
//u
line(25, 0, 25, 20);
line(25, 20, 40, 20);
line(40, 20, 40, 0);
}
void print()
{
for(int i = 0; i < M; ++i)
{
for(int j = 0; j < N; ++j)
{
std::cout << d[i][j];
}
std::cout << '\n';
}
}
int main(int, char*[])
{
memset(d, ' ', M * N);
triangle(10, 20, 20, 10, 30, 20);
print();
memset(d, ' ', M * N);
ilu();
print();
return 0;
}