如何用c++画三角形

2024-12-02 21:58:21
推荐回答(3个)
回答1:

/**
*画正三角形程序
*/
#include
using namespace std;
int main()
{
int rows;
cout<<"请输入三角形的高的行数:"< cin>>rows; //输入三角形的高的行数
int s=10;
int MaxStart=rows*2-1; //计算出这么高的三角型的最底层的星星数.
for(int i=0;i {
s = 1; //控制空格的数量,当s=0后,不再输出空格.
for(int j=0;j {
if(j==((MaxStart+1)/2-i)) //第一行开始的星星是在第(MaxStart+1)/2的位置,下一行比上一行前一位,所以-i;
{
for(int k=0;k<((2*i)+1);k++) //计算该行的星星的个数;
{
cout<<"*";
s = 0;
}
}
if(s == 1) //当s=0后,不再输出空格.
cout<<" ";
}
cout< }
system("pause");
return 0;
}

回答2:

这个题的关键,是判断一个点,落在三角形以内,还是落在三角形以外。
下面调用手头现成的判断一个点,落在凸多边形以内,还是落在凸多边形以外的程序。
int pnpoly(int npol, float *xp, float *yp, float x, float y);
程序步骤:
输入三角形 三个顶点点坐标 xi,yi, 逆时针次序 (保证 叉乘积 为正,为三角形内)
输入填充点的间距 dx,dy
计算 Bounding Box
在 Bounding Box 范围内 找点,落在三角形以内的 调用 你给的drawpoint(int x,int y,int color)
==========================================
#include
#include
int pnpoly(int npol, float *xp, float *yp, float x, float y)
{
int i, j, c = 0;
for (i = 0, j = npol-1; i < npol; j = i++) {
if ((((yp[i]<=y) && (y((yp[j]<=y) && (y(x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
c = !c;
}
return c;
}

int main()
{
float xp[3], yp[3];
float x_max,x_min,y_max,y_min;
float dx,dy;
int i,j;
float x,y;
int color = 5;
for (i=1;i<=3;i++)
{
printf("input x%d y%d:\n",i,i);
scanf("%f %f",&xp[i-1],&yp[i-1]);
};
x_max = xp[0]; x_min = xp[0];
y_max = yp[0]; y_min = yp[0];
for (i=1;i<3;i++){
if (xp[i] > x_max ) x_max = xp[i];
if (xp[i] < x_min ) x_min = xp[i];
if (yp[i] > y_max ) y_max = yp[i];
if (yp[i] < y_min ) y_min = yp[i];
}
printf("input dx dy\n");
scanf("%f %f",&dx,&dy);
for (y=y_min; y<=y_max;y=y+dy) {
for (x=x_min;x<=x_max;x=x+dx) {
if ( pnpoly(3, &xp[0], &yp[0], x, y) == 1)
drawpoint( (int) x, (int) y, color );
// printf("%f %f\n",x,y);
}
}
return 0;
}

回答3: