ユーザーが入力した長方形のパラメーターに基づいて、4つの三角形を生成しようとしています。私の考えは、長方形の中心から原点までの勾配を取得することです。原点は、ppmファイルでは左上にあります。これにより、基本的にすべてが逆になります。とにかく、私が抱えている問題は私のメイン関数に埋め込まれたループにあると思いますが、確かではありません。私の出力は3つの三角形で、左側の三角形が常に傾斜を抱いているかのように下の三角形をオーバーランしています。
出力はパイプで送られ、表示さfile.ppm
れます。
#include <stdio.h>
#include <math.h>
void make_header (int width, int height);
void make_pixel (unsigned char r, unsigned char g, unsigned char b);
void print_Row (float yValue, int width, int height);
void print_Row2 (float yValue, int width, int height);
void make_header(int width, int height)
{
fprintf(stdout,"P6\n");
fprintf(stdout,"%d %d 255\n",width,height);
}
void make_pixel (unsigned char r, unsigned char g, unsigned char b)
{
fprintf(stdout,"%c%c%c", r,g,b);
}
void print_Row(float yValue, int width, int height)
{
int x;
for(x=0;x<yValue;x++)
{
make_pixel(255,0,0); // left triangle
}
for(x=x; x<width-yValue; x++)
{
make_pixel(0,255,0); //top triangle
}
for(x=x;x<width;x++)
{
make_pixel(0,0,255); // right triangle
}
}
void print_Row2(float yValue, int width, int height)
{
int x;
for(x=0;x<yValue;x++)
{
make_pixel(255,0,0);
}
for(x=x;x<width-yValue;x++)
{
make_pixel(0,0,0); //bottom triangle
}
for(x=x;x<width;x++)
{
make_pixel(0,0,255);
}
}
int main()
{
float slope, inv_slope, width_midpoint, height_midpoint, yValue ;
int width,height,x,b;
fprintf(stderr, "\nEnter width: ");
scanf("%d", &width);
fprintf(stderr, "\nEnter height: ");
scanf("%d", &height);
make_header(width, height);
width_midpoint = width / 2;
height_midpoint = height / 2;
slope = (height_midpoint -0) / (width_midpoint - 0);
inv_slope = pow(slope,-1);
for(b=0;b<height_midpoint;b++)
{
for(x=0;x<width;x++)
{
yValue = (inv_slope)*(x) + (b);
print_Row(yValue, width, height);
}
}
for(b=height_midpoint; b<=height; b++)
{
for(x=0;x<width;x++)
{
yValue = (-1*(slope))*(x)+(b);
print_Row2(yValue,width,height);
}
}
return 0;
}