float psi = 10*M_PI/180;
float sphi = sin ( phi);
float cphi = cos ( phi);
float spsi = sin ( psi);
float cpsi = cos ( psi);
float e1 [] ={ cphi, sphi, 0 };
float e2 [] = { spsi*sphi, -spsi*cphi, cpsi};
float x, y;
float hx =(x2-x1 )/n1; float hy = ( y2 - y1 ) / n2;
float xMin = ( e1 [0] >= 0 ? x1 : x2 ) * e1 [0] + ( e1 [1] >= 0 ? y1 : y2 ) * e1 [1]; float xMax = ( el [0] >= 0 ? x2 : x1 ) * e1 [0] + ( e1 [1] >= 0 ? y2 : y1 ) * e1 [1]; float yMin = ( e2 [0] >= 0 ? x1 : x2 ) * e2 [0] + ( e2 [1] >= 0 ? y1 : y2 ) * e2 [1]; float yMax = ( e2 [0] >= 0 ? x2 : x1 ) * e2 [0] + ( e2 [1] >= 0 ? y2 : y1 ) * e2 [1]; int i,j, k;
if ( e2 [2] >= 0 ) {
yMin += fMin * e2 [2]; yMax += fMax * e2 [2];
}
else
 {
yMin += fMax * e2 [2]; yMax += fMin * e2 [2];
}
float ax = 10 - 600 * xMin / ( xMax - xMin );
float bx = 600 / ( xMax - xMin );
float ay = 10 - 400 * yMin / ( yMax - yMin );
float by = -400 / ( yMax - yMin );
for (i = 0; i < sizeof ( YMax ) / sizeof (int); i++ )
YMin [i] = YMax [i] = NO_VALUE; for (i = 0; i < n1; i++ )

Компьютерная графика. Полигональные модели

{

х = х1 + i * hx; у = у1 + ( п2 - 1 ) * hy;

curLine [i].x = (int)(ax + bx * ( x * e1 [0] + у * e1 [1]));

curLine [i].y = (int)(ay + by * ( x * e2 [0] + у * e2 [1] + f ( x, у ) * e2 [2] ));

}
for (i = n2 - 1; i > -1; i--)
{
for (j = 0; j < n1 -1;j++)
drawLine (curLine 0], curLine D + 1]); if (i > 0 )
for(j = 0;j<n1;j++)
{
x = x1 + j * hx;

у = y1 + (i -1 ) * hy;

nextLine 0]-x = (int)( ax + bx * (x * e1 [0] + у * e1 [1]));

nextLine D].y = (int)( ay + by * ( x * e2[0] + у * e2[1] + f ( x, у ) * e2 [2]));

drawLine ( curLine [j], nextLine 0]);
curLine 0] = nextLine 0];
}
}
delete curLine; delete nextLine;
}

Следует иметь в виду, что в общем случае порядок вывода отрезков зависит от выбора углов (рту/.

Рассмотрим теперь задачу построения полутонового изображения графика функции z =f(x, у).

Как и ранее, введем сетку

{(xi,yjjti = l,...,n1,j = l,...,n2},

затем приблизим график функции набором треугольных граней с вершинами в точках (х»ур/(хьу$).


⇐ Предыдущая| |Следующая ⇒