2014年2月12日水曜日

openFrameworksで描く色々な曲線

今回はopenFrameworksで、数学の関数を利用した曲線を色々と描いてみたいと思います。

まずはsinとcosを使った円の描写


//--------------------------------------------------------------
void testApp::setup(){
    ofBackground(0, 0, 0);
    

}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
    
    ofTranslate(ofGetWidth()/2, ofGetHeight()/2);//原点を画面の中心に
    
    //方眼紙
    int lines=ofGetWidth()/2/20+1;
    
        ofSetColor(70, 70, 70);
    for (int i=0; i < lines; i++) {
        ofLine(20*i, -1*ofGetHeight()/2, 20*i, ofGetHeight()/2);
        ofLine(-20*i, -1*ofGetHeight()/2, -20*i, ofGetHeight()/2);
        ofLine(-1*ofGetWidth()/2, 20*i, ofGetWidth()/2, 20*i);
        ofLine(-1*ofGetWidth()/2, -20*i, ofGetWidth()/2, -20*i);
    }
    
    ofSetColor(100, 100, 100);
    ofLine(0, -1*ofGetHeight()/2, 0, ofGetHeight()/2);//中心線
    ofLine(-1*ofGetWidth()/2, 0, ofGetWidth()/2, 0);
    
    //式
    ofSetColor(124, 181, 255);
    float radius=200;
    for (int i=0; i < 1000; i++) {
        float x=cos(i)*radius;
        float y=sin(i)*radius;
        ofCircle(x, y, 1);
    }



}


螺旋

#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){
    ofBackground(0, 0, 0);
    

}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
    
    ofTranslate(ofGetWidth()/2, ofGetHeight()/2);//原点を画面の中心に
    
    //方眼紙
    int lines=ofGetWidth()/2/20+1;
    
        ofSetColor(70, 70, 70);
    for (int i=0; i < lines; i++) {
        ofLine(20*i, -1*ofGetHeight()/2, 20*i, ofGetHeight()/2);
        ofLine(-20*i, -1*ofGetHeight()/2, -20*i, ofGetHeight()/2);
        ofLine(-1*ofGetWidth()/2, 20*i, ofGetWidth()/2, 20*i);
        ofLine(-1*ofGetWidth()/2, -20*i, ofGetWidth()/2, -20*i);
    }
    
    ofSetColor(100, 100, 100);
    ofLine(0, -1*ofGetHeight()/2, 0, ofGetHeight()/2);//中心線
    ofLine(-1*ofGetWidth()/2, 0, ofGetWidth()/2, 0);
    
    //式
    ofSetColor(124, 181, 255);
    for (int i=0; i < 10000; i++) {
        float radius=10+0.02*i;//螺旋の間隔調整
        float x=cos(i*0.01)*radius;
        float y=sin(i*0.01)*radius;
        ofCircle(x, y, 1);
    }



}


インボリュート曲線


#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){
    ofBackground(0, 0, 0);
    

}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
    
    ofTranslate(ofGetWidth()/2, ofGetHeight()/2);//原点を画面の中心に
    
    //方眼紙
    int lines=ofGetWidth()/2/20+1;
    
        ofSetColor(70, 70, 70);
    for (int i=0; i < lines; i++) {
        ofLine(20*i, -1*ofGetHeight()/2, 20*i, ofGetHeight()/2);
        ofLine(-20*i, -1*ofGetHeight()/2, -20*i, ofGetHeight()/2);
        ofLine(-1*ofGetWidth()/2, 20*i, ofGetWidth()/2, 20*i);
        ofLine(-1*ofGetWidth()/2, -20*i, ofGetWidth()/2, -20*i);
    }
    
    ofSetColor(100, 100, 100);
    ofLine(0, -1*ofGetHeight()/2, 0, ofGetHeight()/2);//中心線
    ofLine(-1*ofGetWidth()/2, 0, ofGetWidth()/2, 0);
    
    //式
    float x=0;
    float y=0;
    ofSetColor(124, 181, 255);
    for (int i=0; i < 10000; i++) {
        float sita=fmodf(i,360);
        float size=1;
        x=size*(sita*cos(sita));
        y=size*(sita*sin(sita));
        ofCircle(x, y, 5);
    }
}



バラ曲線



void testApp::draw(){
    
    ofTranslate(ofGetWidth()/2, ofGetHeight()/2);//原点を画面の中心に
    
    //方眼紙
    int lines=ofGetWidth()/2/20+1;
    
        ofSetColor(70, 70, 70);
    for (int i=0; i < lines; i++) {
        ofLine(20*i, -1*ofGetHeight()/2, 20*i, ofGetHeight()/2);
        ofLine(-20*i, -1*ofGetHeight()/2, -20*i, ofGetHeight()/2);
        ofLine(-1*ofGetWidth()/2, 20*i, ofGetWidth()/2, 20*i);
        ofLine(-1*ofGetWidth()/2, -20*i, ofGetWidth()/2, -20*i);
    }
    
    ofSetColor(100, 100, 100);
    ofLine(0, -1*ofGetHeight()/2, 0, ofGetHeight()/2);//中心線
    ofLine(-1*ofGetWidth()/2, 0, ofGetWidth()/2, 0);
    
    //式
    float x=0;
    float y=0;
    ofSetColor(124, 181, 255, 100);
    for (int i=0; i < 36000; i++) {
        float sita=fmodf(i*0.01,360);//点の数
        int d=7;
        int n=8;
        float size=300*sin(n*sita);
        x=size*sin(d*sita);
        y=size*cos(d*sita);
        ofCircle(x, y, 1);
    }
    
    //float sita=fmodf(i,360);
}


dとnに入れる値を変更する事で、花びらの形を変える事が出来ます
参考: http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%A9%E6%9B%B2%E7%B7%9A

0 件のコメント:

コメントを投稿