現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::シェルピンスキーのギャスケット

問題

答え


#include <iostream>
#include <string>
#include <cv.h>
#include <highgui.h>


using namespace std;


namespace
{
const int dimension = 5;
}

/*******[プロトタイプ宣言]*******/
void DRAW_FRACTAL(IplImage *imgA);
void DRAW_SHELPINSKI(IplImage *imgA,CvPoint p1, CvPoint p2,CvPoint p3,int dim);


/*********[メイン関数]****************/
CvSize win_size={300,300};
int main(int argc,char**argv)
{

IplImage *imgA = cvCreateImage(win_size,IPL_DEPTH_8U,3);
cvSet (imgA, cvScalarAll (255), 0);

DRAW_FRACTAL(imgA);

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);

cvWaitKey(0); // 0秒待つ => ずっと入力待ち

cvReleaseImage(& imgA);
cvDestroyWindow("window");

return 0;
}


/**********[ ここから各種関数 ]***************/
void DRAW_FRACTAL(IplImage *imgA)
{
CvPoint a ={150,10},b={10,290},c={290,290};
DRAW_SHELPINSKI(imgA,a,b,c,dimension);
}

void DRAW_SHELPINSKI(IplImage *imgA,CvPoint p1, CvPoint p2,CvPoint p3,int dim)
{

if(dim == 0) return;

cvLine(imgA,p1,p2,CV_RGB(255,0,0));
cvLine(imgA,p2,p3,CV_RGB(255,0,0));
cvLine(imgA,p3,p1,CV_RGB(255,0,0));


CvPoint p4,p5,p6;
p4.x = int( ((p1.x + p2.x)/2.0) + 0.5 );
p4.y = int( ((p1.y + p2.y)/2.0) + 0.5 );

p5.x = int( ((p2.x + p3.x)/2.0) + 0.5 );
p5.y = int( ((p2.y + p3.y)/2.0) + 0.5 );

p6.x = int( ((p1.x + p3.x)/2.0) + 0.5 );
p6.y = int( ((p1.y + p3.y)/2.0) + 0.5 );

DRAW_SHELPINSKI(imgA,p1,p4,p6,dim-1);
DRAW_SHELPINSKI(imgA,p4,p2,p5,dim-1);
DRAW_SHELPINSKI(imgA,p6,p5,p3,dim-1);

}

メモ


単に線をひいているだけ。
ぬりつぶし等、何もしていない。
×

この広告は60日間更新がないwikiに表示されております。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます