тогОпх х = р1 .х,у = р1 .у, \ = 0;\ <= ах;!++, х += эх) {
|7 ( УМю [х] == ЫСП/АШЕ ) // УМю, УМах пот \п\\еб {
ритр1хе1 ( х, у, ирСо!ог ); УМт [х] = УМах [х] = у;
}
е1Бе
\1 ( у < УМт [х] )
{
ритрнхе! ( х, у, ирСоЬг); УМт [х] = у;
}
е1Бе
7 ( у > УМах [х]) {
рихр1хе1 ( х, у, оо\/упСо1ог); УМах [х] = у;
}
Я ( б > 0 ) {
б += 62; у += ву;
}
е^е б +=а1;
}
}
е1эе
{
б = -ау; !п! а1 = ах « 1; Ы 62 = ( бх - бу ) « 1; Ы гп1 = УМт [р1.х]; 1п1 гл2 = УМах [р1.х];
^г (1п1 х = р1 .х, у = р1 .у, \ = 0; \ <= бу; \++, у += ву ) {
К ( УМт [х] == ЫО_Л/АШЕ ) // УМт, УМах пот Шеб {
ри!р[хе1 ( х, у, ирСо1ог ); УМт [х] = УМах [х] = у;
10. Удаление невидимых линий и поверхносте
}
else
if ( y < ml )
{
putpixel ( x, y, upColor); if ( y < YMin [x]) YMin [x] = y;
}
else if ( y > m2 )
{
putpixel ( x, y, downColor); if ( y > YMax [x]) YMax [x] = y;
}
if ( d > 0 ) {
d += d2; x += sx; ml = YMin [x]; m2 = YMax [xj;
}
else
d +=d1;
}
}
void plotSurface (float x1, float y1, float x2, float y2,
float (*f)( float, float), float fMin, float fMax, int n1, int n2 )
{
Point* curLine = new Point [n1];
float phi =30*M_PI/180;
float psi = 10*M_PI/180;
float sphi = sin ( phi);
float cphi = cos ( phi);
float spsi = sin ( psi);
float cpsi = cos ( psi);
float e1 0 = { cphi, sphi, 0 };
float e2 Q = {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 = ( e1 [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 * е2 [2]; уМах += fMin * е2 [2];
}
float ах = 10 - 600 * xMin / ( хМах - xMin ); float bx = 600 / ( хМах - xMin ); float ay = 10 - 300 * yMin / ( yMax - yMin ); float by = -300 / ( yMax - yMin );