自分で定義した関数drawsessen(接線)で、クリックした位置に図形を描くプログラミングを作っています。今のプログラムだと、新しい場所をクリックすると前の図形の描写が止まってしまうので、それぞれが描写され続けるようにしたいです。
配列を使えばいいのだと思うのですが、エラーが出てしまったりクリックした位置とは違う位置に描画されてしまったりしてしまいます。
このプログラムに配列を組み込むにはどうしたらいいのでしょうか?
大学の授業でプログラミングを習い始め、基本的な知識しかありません…
どなたか分かる方がいらっしゃいましたらよろしくお願いいたします。
#include "ofApp.h"
float x1,y1_,x2,y2,x3,y3,x4,y4,red,green,blue,time_,kaiten,r,t,h;
int i;
//rは接線を引く円の半径
//--------------------------------------------------------------
void ofApp::drawsessen(float t,float h,float r){
ofTranslate(t, h);
//座標を回転する
ofRotateDeg(kaiten);
//色を変化させる
float red=ofNoise(x1,y1_,time_/0.57)*255+100;
float green=ofNoise(x1,y1_,time_/0.5)*255+100;
float blue=ofNoise(x1,y1_,time_/0.4)*255+100;
//円の接線をかく
for (x1 = -r/2; x1 <= r/2; x1=x1+15) {
x2=x1*x1;
y2=y1_*y1_;
y2=r*r-x2;
//平方根の計算
float x3=sqrt(x2);
float y3=sqrt(y2);
for (x4 = -r*2; x4 <= r*2; x4=x4+0.1) {
y4=(r*r-x3*x4)/y3;
ofNoFill();
ofSetColor(red, green, blue);
ofDrawCircle(x4, y4, 0.01);
}
}
}
//--------------------------------------------------------------
void ofApp::setup(){
ofSetBackgroundAuto(false);
ofBackground(0, 0, 0);
ofSetFrameRate(5);
}
//--------------------------------------------------------------
void ofApp::update(){
time_+=0.01;
kaiten+=6;
}
//--------------------------------------------------------------
void ofApp::draw(){
if(i>0){
drawsessen(t, h,30+25);
}
}
//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
t=x;
h=y;
kaiten=0;
i++;
}
ツイート | ![]() |