어제 새벽에 너무 감사하게도 여기 갤러분들께서 친절하게 잘 알려주셔서 덕분에 제가 과제 발표를 너무 잘했습니다.
오랫동안 저를 괴롭히던 과제였는데 여기 계신 고수님들 덕분에 잘 끝낼 수 있었습니다 ㅠㅠㅠ 진짜 기프트콘이라도 보내드리고 싶은 심정이예요ㅜㅜ
그런데 오늘 발표를 너무 잘해서 (모두 어제 한 수 가르쳐주셨던 갤러분들 덕분이었습죠) 저희 조만 과제를 하나 더 부여받았는데요, 오늘 저희 나름대로 공부를 해봤는데 안풀리는 부분이 있어서 질문 드립니다...어제에 이어 염치없지만ㅠㅠ 한 수 가르침 부탁드립니다. 코드 전문 올릴게요
좀 깁니다 미리 ㅈㅅㅈㅅ ㅠㅠ일단 실행해보면 마우스 왼쪽 버튼을 클릭! 했을 때 물감이 찍힙니다. 그리고 마우스를 이동하면 점들이 연속해서 찍힙니다. 가장 이해가 안되는 부분은 마우스 이동 시 찍히는 점들 간의 간격 조절이 안된다는 것입니다. (아, 참고로 이 코드의 특징은 시간이 지날수록 물감의 색이 흐려지는 것입니다)
float sizInc = 0.72; //밖으로 퍼지는 물감의 두께입니다
float splatSizDec = 0.4; // 얘도 물감 두께 같습니다...코드 ㅈㄴ 이상함요...; 제가 변수를 잘못 해석했을 수도 있지만
float minSpeed = 20; // 흘러내리는 물감의 속도 같습니다.
float maxOffset = 1; // 물감이 찍힐 때 물감들 끼리 모이는 정도? 밀도? 라고 할 수 있을듯합니다.
float maxSiz = 20; // 퍼지는 부분 말고 마우스로 찍었을 때 찍히는 그 가운데 원의 두 (말로 설명이 되나요ㅠㅠㅠ)
float maxHay = 500; // 얘네가 문제입니다....Hay Tay Var 가 뭔지 모르겠음 ㅠㅠ
float maxTay = 500;
float maxVar = 300;
float mousX = 3; // 얘네에 대해서 궁금한 점은 밑에 적도록 하겠습니다.
float prevMousX; // 그 이전에 있던 마우스 위치를 말합니다.
float mousY = 3; // 후...ㅅㅂ 얘도 모르겠어요 ......
float prevMousY; // 마찬가지로 그 이전에 있던 마우스의 Y좌표입니다
float mousVX; // 마우스의 이동 거리? 간격?을 말합니다. 결국 찍힌 물감과 그 다음으로 찍힌 물감의 간격이죠.
float mousVY; // 위와 같습니다.
float time = 0;
ArrayList paintDots;
void setup()
{
background(255);
fill(0);
size(480, 800);
smooth();
paintDots = new ArrayList();
}
void draw() {
updateAll();
fade();
time += 0.01;
}
void fade()
{
if(time > 10) // 마우스 오른쪽 버튼을 눌렀을 때 흰색 솔리드가 계솓 덮히면서 화면을 덮어나가는 속도입니다.
{
noStroke();
fill(255,255,255,30);
rect(0,0,700,500);
time = 0;
}
if(mousePressed && (mouseButton == RIGHT))
{
for(int i = paintDots.size()-1; i >= 0; i--)
{ paintDots.remove(i); }
fill(255,255,255);
rect(0,0,700,500);
}
}
void updateAll()
{
prevMousX = mousX;
prevMousY = mousY;
mousX = mouseX;
mousY = mouseY;
mousVX = mousX - prevMousX;
mousVY = mousY - prevMousY;
if(mousePressed && (mouseButton == LEFT))
{
// 제가 해석한 바로는 여기가 물감과 그 다음 찍힌 물감간의 거리를 조절하는 부분이란 말이죠?
mousVX = mousX - prevMousX; (마우스가 이동한 간격 = 마우스의 현재 위치- 마우스의 이전 위치) 니까. 여기서 마우스 클릭에 따라 생겨나는 점들의 간격/거리 도 정해지는 거잖아요? 그래서 저희가 간격을 줄여보고자 이 부분에 -100 까지도 해봤는데 간격이 줄어들 생각을 안합니다. 왜일까요? 불쌍한 디자인과 학생 돕는다고 생각하시고 제발 한번만 도와주십셔 ㅠㅠ 어제도 정말 감사했었습니다.
mousVY = mousY - prevMousY;
float Tay = random(30,50);
float Hay = random(30,50);
float Var = random(0,maxVar);
{
paintDots.add(new paintDot(mousX, mousY, Tay,Hay,Var));
}
}
updateDots();
}
void updateDots()
{
print(paintDots.size());
for (int i = paintDots.size()-1; i >= 0; i--)
{
paintDot drop = (paintDot)paintDots.get(i);// An ArrayList doesn't know what it is storing so we have to cast the object coming out
drop.update();
drop.display();
if (drop.finished())
{
paintDots.remove(i);
}
}
}
class paintDot {
float x, y, vx, vy, siz, prevx,prevy, slow, sizDec,life,vectorVar,vectorTay,vectorHay;
int r,g,b;
boolean dripping;
paintDot (float moux, float mouy, float vT, float vH, float vV) {
r = (int)random(70,80);
g = (int)random(28,3);
b = (int)random(5,15);
vectorHay = vH;
vectorVar = vV;
vectorTay = vT;
sizDec = splatSizDec;//random(0,splatSizDec);
float offsetX = pow(random(0,maxOffset),2);
float offsetY = pow(random(0,maxOffset),2);
x = moux + random(-1,1)*offsetX;
y = mouy + random(-1,1)*offsetY;
vx = vectorTay + random(-1*vectorVar,vectorVar);
vy = vectorHay + random(-0.75*vectorVar,vectorVar);
siz = random(1,maxSiz);
}
void update() {
vx *= slow;
vy *=slow;
if(dripping == false)
prevx = x;
prevy = y;
x += vx;
y += vy;
siz = (siz * sizDec) + sizInc;
if(dripping)
{ siz -= (int)(sizInc); }
//print("Dot at " + x + ", " + y + " vx = " + vx + " vy = " + vy + " siz = " + siz);
}
void display()
{
stroke(r,g,b,240);
strokeWeight((int)siz);
line(x,y,prevx,prevy);
}
boolean finished()
{
if(vx*vx + vy < minSpeed)
{
if(dripping == false)
{
dripping = true;
vx = 0;
vy = pow(random(0,1.5),2);
return false; }
else{
return true;
}
}
else
{
return false;
}
}
}
마우스 클릭을 통해 점1을 찍음- 마우스는 클릭한채 이동하면 점2가 새로 찍힘 - 그게 반복되면서 마우스가 이동한 모양대로 그림이 그려지는 그런 코드입니다. 근데 그 이동 간격을 줄이고 싶은데 제 생각엔 mousVX = mousX - prevMousX; mousVY = mousY - prevMousY; 여기가 간격 조절 부분인데 아무리 조절해도 바뀌는게 없어요 ㅠㅠㅠㅠ 정말 아무것도 모르는 디자인과 구제 좀 부탁드립니다 컴공과 학도분들/ 전지전능하신 전문가님들 ㅠㅠㅠ
ㅋㄷㅋㄷ 이거 랩자드가 맨날 하는건데.
ㅅㅅㅅ도 툴을 깔았고, ㅅㅅㅅ 가 충분히 할것 같음.
느려도 상관없으면 걍 mid-point line 알고리즘으로 얻어지는 x, y 들을 중심으로 원을 그리면 돼.
최적화 하고싶으면 벡터방향을 보고 아크를 따야 되는데 자바에선 그닥 최적화도 안된다.
니 질문이 사랑받길 원하면 폰트는 courier new 10 포인트로 하고 들여쓰기 공백으로 칼같이 맞춰서 수정해라.
요즘은 안하는디. 근데 글쓴이 교수님이 양씨 아니심?
좋은 지적이십니다 바로 수정하겠음요 ㄱㅅㄱㅅ
양씨 아니십니다 ㅋㅋ 김씨예요 요즘은 이런거 안하나봐요? ㅋㅋㅋ 전 왜 하는거죠 ㅠㅠㅠ 후
@ㅇㅇ : 코세가 저보고 한다는건 드로잉 엔진;; 프로세싱은 아님여
ㅇㅇ 랩이가 옛날에 드로잉엔진 만들어서 많이 팔아먹..
글씨체 바꾸고 들여쓰기도 했습니다 ㄱㅅㄱㅅ ㅅㅅㅅ 님은 지금 갤에 계시려나요...바쁘신가? ㅜㅜㅜ
ㅋㄷㅋㄷ 애썼는데 들여쓰기는 공백으로 맞춰야돼 자주 폰트가 바껴서 잘 안되지 : ) 메모장 같은데서 미리 정리해서 붙여넣는게 속편해.
ㅅㅅㅅ가 안풀어주면 내가 내일 아침쯤에 win32 app 으로 process 코드 에뮬레이션 해서 만들어서 올려주마.
code님 되게 인자하신 직장 상사 같아요 ㅋㅋㅋㅋㅋㅋㅋ 진짜 감사합니다 ㅠㅠ 여기 착하신 분들만 계시네 진심....
ㅅㅅㅅ 등장!!
ㅋㅋㅋ ㅅㅅㅅ 도조~
궁금해 하는 tay, hay, var의 의미만 일단 글로 올려봤어.
http://gall.dcinside.com/board/view/?id=programming&no=497268
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ너무 반갑습니다 ㅅㅅㅅ님 ㅠㅠㅠㅠㅠㅠㅠ글 올려주신거 읽어보는 중이예요! 이번에도 역시 너무 이해 잘 가게 해주셨네요ㅠㅠ
기프티콘 안쏘냐?
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.