-4

SDLを使用してC ++でCIE色度図を作成するにはどうすればよいですか..ピクセルを描画できるようになりましたが、線を描画してそれらを接続し、それを閉じて馬蹄形を形成する方法がわかりません。誰か助けてもらえますか? 私は立ち往生していて、できるだけ早くこれを終わらせる必要があります

 #include <stdlib.h>
 #include <SDL.h>
 #include <SDL_thread.h>
 void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B, float x, float y)
 {
 y = 1 - y;
 x *= 300;
 y *= 300;

 Uint32 color = SDL_MapRGB(screen->format, R, G, B);
 Uint32 *bufp;
 bufp = (Uint32 *)screen->pixels + (int)y*screen->pitch/4 + (int)x;
 *bufp = color;
 }


 int main( int argc, char* args[] )
 {
 float x[95] = {     
 0.1756,0.1752,0.1748,0.1745,0.1741,0.1740,0.1738,0.1736,0.1733,
 0.1730,0.1726,0.1721,
 0.1714,0.1703,0.1689,0.1669,0.1644,0.1611,0.1566,0.1510,0.1440,0.1355,
 0.1241,0.1096,0.0913,0.0687,0.0454,0.0235,0.0082,
 0.0039,0.0139,0.0389,0.0743,0.1142,0.1547,0.1929,
 0.2296,0.2658,0.3016,0.3374,0.3731,0.4087,0.4441,
 0.4788,0.5125,0.5448,0.5752,0.6029,0.6270,0.6482,
 0.6658,0.6801,0.6915,0.7006,0.7079,0.7140,0.7190,
 0.7230,0.7260,0.7283,0.7300,0.7311,0.7320,0.7327,
 0.7334,0.7340,0.7344,0.7346,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347};

 float y[95] = {0.0053,0.0053,0.0052,0.0052,0.0050,0.0050,0.0049,
 0.0049,0.0048,0.0048,0.0048,0.0048,0.0051,0.0058,0.0069
 ,0.0086,0.0109,0.0138,0.0177,0.0227,0.0297,0.0399,0.0578
 ,0.0868,0.1327,0.2007,0.2950,0.4127,0.5384,
 0.6548,0.7502,0.8120,0.8338,0.8262,0.8059,0.7816,
 0.7543,0.7243,0.6923,0.6588,0.6245,0.5896,0.5547,
 0.5202,0.4866,0.4544,0.4242,0.3965,0.3725,0.3514,
 0.3340,0.3197,0.3083,0.2993 ,0.2920,0.2859,0.2809,0.2769,
 0.2740,0.2717,0.2700,0.2689,0.2680     
 ,0.2673,0.2666,0.2660,0.2656,0.2654,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653};

 SDL_Surface* screen = NULL;

 //Start SDL
 SDL_Init( SDL_INIT_EVERYTHING );



 //Set up screen
 screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
 for (int i=0; i < 95; i++)
 {
   DrawPixel (screen, 255, 0,  0, x[i], y[i]);
 }


 //Update Screen
 SDL_Flip( screen );

 //Pause
 SDL_Delay( 5000 );

 //Quit SDL
 SDL_Quit();

 return 0;    
 }
4

1 に答える 1

0

指定した X/Y 座標は色度図のアウトライン用であるため、基本的には最初の点 (x[0], y[0]) に移動し、後続の各点に線を引くだけです。 (x[i], y[i]) で輪郭を描きます:

ここに画像の説明を入力

使用目的によっては、通常の背景色の塗りつぶしも行いたい場合があります。価値があるのは、人々がそれを描く方法には多くのバリエーションがあることがわかります(そして、私は方法だけを意味するのではなく、結果を意味します.最後のポイントを最初のポイントに接続して、閉じたものにすることもできます.曲線、描画座標、原点/横座標など

于 2013-08-02T06:51:18.497 に答える