벡터 클래스 이용 없이 위치, 속력 이동 계산.
let x = 100;
let y = 100;
let xspeed = 1;
let yspeed = 3.3;
function setup(){
createCanvas(300, 300);
background(255);
}
function draw(){
background(255);
x += xspeed;
y += yspeed;
if((x > width) || (x < 0)){
xspeed = xspeed * -1;
}
if((y > height) || (y < 0)){
yspeed = yspeed * -1;
}
stroke(0);
fill(175);
ellipse(x, y, 20, 20);
}
let loc;
let vel;
let r = 20;
function setup(){
createCanvas(300, 300);
background(255);
loc = createVector(100, 100);
vel= createVector(1, 3.3);
}
function draw(){
background(255);
loc = loc.add(vel);
if((loc.x > width) || (loc.x < 0)){
vel.x = vel.x * -1; // 벡터 연산이 아님
}
if((loc.y > height) || (loc.y < 0)){
vel.y = vel.y * -1;
}
stroke(0);
fill(175);
ellipse(loc.x, loc.y, r, r);
}
mouseX, mouseY - centerX, centerY
기존 예제: mouseX, mouseY 활용한 벡터
응용 코드: 끝점 - 시작점의 벡터라인이 알아서 원을 그리게끔 변경
let mouseVec, center, angle;
let x, y, slider;
let rOff = 0.0;
function setup() {
createCanvas(400, 400);
slider = createSlider(0.25, 5, 1.0, 0.25);
}
function draw() {
background(0, 10);
let val = slider.value();
angle = frameCount%360;
rOff += 0.5;
// mouseVec = createVector(mouseX, mouseY);
end = createVector(1000*sin(angle*val), 1000*cos(angle*val));
// val 곱하면, 슬라이더 값에 따라서 translate 좌표로부터 변이가 생김.
center = createVector(width/2, height/2);
// mouseVec.sub(center); // 마우스 지점이 벡터 라인의 끝점
end.sub(center); // end 벡터 라인에서 화면 중앙 좌표점 뺀 값의 벡터
// translate(width/2, height/2); // 벡터가 계속 중앙좌표점에서 시작
translate(width/2+sin(angle)*(rOff % 200), height/2+cos(angle)*(rOff % 200));
// 벡터의 시작점이 점점 중앙에서 멀어지면서 sin, cos 원리대로 원을 그림. rOff % 200 을 함으로써 시작점이 0~200 을 계속 반복하도록, 캔버스에서 아예 벗어나지 않도록 함.
// 이하 생략