NCF参数化建筑论坛
标题:
请教大家简化这个code的方法
[打印本页]
作者:
volcanoohead
时间:
2011-3-14 17:58
标题:
请教大家简化这个code的方法
本帖最后由 volcanoohead 于 2011-3-15 12:49 编辑
float x,y,nx1,ny1,nx2,ny2,nx3,ny3,nx4,ny4,nx5,ny5,nx6,ny6,px,py,scf,scfx,scfy; float scfl = 0.95; float t1 = 0; float l1 = 160; float st1 = 0.01; float elf = 1.5; float t2 = 1; float l2 = l1 * scfl; float st2 = 0.02; float t3 = 2; float l3 = l2 * scfl; float st3 = 0.05; float t4 = 3; float l4 = l3 * scfl; float st4 = 0.07; float t5 = 4; float l5 = l4 * scfl; float st5 = 0.09; float t6 = 5; float l6 = l5 * scfl; float st6 = 0.07; float t7 = 6; float l7 = l6 * scfl; float st7 = 0.05; void setup(){ size(1100,1100); smooth(); } void draw(){ //refresh background background(255); x = mouseX; y = mouseY; scfx = 0.6*((width/2)-(abs(x-(width/2))))/(width / 2); scfy = 0.6*((height/2)-(abs(y-(height/2))))/(height / 2); scf = min(scfx,scfy); // set circle point algorithms nx1 = x+scf*elf*l1*sin(t1); ny1 = y+scf*l1*cos(t1); t1=t1+st1; nx2 = nx1+scf*l2*sin(t2); ny2 = ny1+scf*elf*l2*cos(t2); t2=t2-st2; nx3 = nx2+scf*elf*l3*sin(t3); ny3 = ny2+scf*l3*cos(t3); t3=t3+st3; nx4 = nx3+scf*l4*sin(t4); ny4 = ny3+elf*scf*l4*cos(t4); t4=t4-st4; // set a circle point algorithm nx5 = nx4+elf*scf*l5*sin(t5); ny5 = ny4+scf*l5*cos(t5); t5=t5+st5; // set a circle point algorithm nx6 = nx5+elf*scf*l6*sin(t6); ny6 = ny5+scf*l6*cos(t6); t6=t6-st6; //draw some circles if ( x < width/2){ if ( y < height/2){ fill(0,128,255,100); } else if ( y >= height/2){ fill(255,0,0,100); } } else{ if ( y < height/2){ fill(200,255,120,100); } else if ( y >= height/2){ fill(255,255,0,100); } } noStroke(); ellipse(x,y,scf*l1*(sin(t1)+cos(t1))*2,scf*l1*(sin(t1)+cos(t1))*2); ellipse(nx1,ny1,scf*l2*(sin(t2)+cos(t2))*2,scf*l2*(sin(t2)+cos(t2))*2); ellipse(nx2,ny2,scf*l3*(sin(t3)+cos(t3))*2,scf*l3*(sin(t3)+cos(t3))*2); ellipse(nx3,ny3,scf*l4*(sin(t4)+cos(t4))*2,scf*l4*(sin(t4)+cos(t4))*2); ellipse(nx4,ny4,scf*l5*(sin(t5)+cos(t5))*2,scf*l5*(sin(t5)+cos(t5))*2); ellipse(nx5,ny5,scf*l6*(sin(t6)+cos(t6))*2,scf*l6*(sin(t6)+cos(t6))*2); ellipse(nx6,ny6,scf*l7*(sin(t7)+cos(t7))*2,scf*l7*(sin(t7)+cos(t7))*2); //draw a bezier noFill(); stroke(255); strokeWeight(3); beginShape(); curveVertex(x,y); curveVertex(nx1,ny1); curveVertex(nx2,ny2); curveVertex(nx3,ny3); curveVertex(nx4,ny4); curveVertex(nx5,ny5); curveVertex(nx6,ny6); curveVertex(x,y); curveVertex(nx1,ny1); curveVertex(nx2,ny2); endShape(); noStroke(); bezier (x,y,nx1,ny1,nx2,ny2,nx3,ny3); bezier (nx3,ny3,nx4,ny4,nx5,ny5,nx6,ny6); bezier (nx6,ny6,x,y,nx1,ny1,nx2,ny2); bezier (nx2,ny2,nx3,ny3,nx4,ny4,nx5,ny5); bezier (nx5,ny5,nx6,ny6,x,y,nx1,ny1); bezier (nx1,ny1,nx2,ny2,nx3,ny3,nx4,ny4); bezier (nx4,ny4,nx5,ny5,nx6,ny6,x,y); // draw center point stroke(0); strokeWeight(5); ellipseMode(CENTER); ellipse(x,y,5,5); ellipse(nx1,ny1,5,5); ellipse(nx2,ny2,5,5); ellipse(nx3,ny3,5,5); ellipse(nx4,ny4,5,5); ellipse(nx5,ny5,5,5); ellipse(nx6,ny6,5,5); stroke(255); strokeWeight(1); ellipseMode(CENTER); ellipse(x,y,5,5); ellipse(nx1,ny1,2,2); ellipse(nx2,ny2,2,2); ellipse(nx3,ny3,2,2); ellipse(nx4,ny4,2,2); ellipse(nx5,ny5,2,2); ellipse(nx6,ny6,2,2); //draw clock arms stroke(100); strokeWeight(1); line(x,y,nx1,ny1); line(x,y,nx2,ny2); line(nx1,ny1,nx2,ny2); line(nx1,ny1,nx3,ny3); line(nx1,ny1,nx4,ny4); line(nx1,ny1,nx5,ny5); line(nx2,ny2,nx3,ny3); line(nx2,ny2,nx4,ny4); line(nx2,ny2,nx5,ny5); line(nx3,ny3,nx4,ny4); line(nx3,ny3,nx5,ny5); line(nx4,ny4,nx5,ny5); line(nx5,ny5,nx6,ny6); line(nx4,ny4,nx6,ny6); line(nx3,ny3,nx6,ny6); line(nx2,ny2,nx6,ny6); line(nx1,ny1,nx6,ny6); line(x,y,nx6,ny6); // draw coordinate lines stroke(255,100); strokeWeight(1); line(0,y,width,y); line(x,0,x,height); line(0,ny1,width,ny1); line(nx1,0,nx1,height); line(0,ny2,width,ny2); line(nx2,0,nx2,height); line(0,ny3,width,ny3); line(nx3,0,nx3,height); line(0,ny4,width,ny4); line(nx4,0,nx4,height); line(0,ny5,width,ny5); line(nx5,0,nx5,height); line(0,ny6,width,ny6); line(nx6,0,nx6,height); //draw center white point stroke(255); strokeWeight(1); ellipseMode(CENTER); ellipse(x,y,5,5); ellipse(nx1,ny1,2,2); ellipse(nx2,ny2,2,2); ellipse(nx3,ny3,2,2); ellipse(nx4,ny4,2,2); ellipse(nx5,ny5,2,2); ellipse(nx6,ny6,2,2); println("scf = " +scf + " x = " + x + " y = " + y + " nx1 = " + nx1 + " ny1 = " + ny1); }
作者:
volcanoohead
时间:
2011-3-14 17:58
我知道我写得很罗嗦很罗嗦。有没有什么办法简化这个code呢?
作者:
minfish2005
时间:
2011-3-14 18:10
这么复杂啊,看着有点晕
作者:
yy6669
时间:
2011-3-14 20:30
天哪..有必要这么夸张吗?从定义的格式开始就可以简化..但是我也不是很熟练...还是有待论坛里面高手解答...
作者:
饼干笨笨
时间:
2011-3-14 20:40
恩,好好研究下楼主的东西
作者:
panhao1
时间:
2011-3-14 20:51
用类(class)就可以啦~ 不过你写的本来就不是很复杂 一看就懂了
作者:
bluelotus0107
时间:
2011-3-14 20:56
你直接说你想干嘛比贴一堆代码要好的多嘛
作者:
volcanoohead
时间:
2011-3-15 10:58
7#
panhao1
谢谢。我刚学到教材60页。看了看class在300多页。
作者:
volcanoohead
时间:
2011-3-15 12:01
4#
yy6669
请问定义的时候如何简化呢?
作者:
holonking
时间:
2011-3-15 13:22
9#
volcanoohead
haha,60页就能写成这样啦。 首先,大量的同类型变量可用array,list,之类的数组来表示 然后你就可以通过循环来画线和圆。 你可翻阅“数组 array/data structure”和“循环 loop/control structure”
作者:
ou312382395
时间:
2011-3-15 17:50
没有接触过这个,顶一个
作者:
45212046
时间:
2011-3-15 18:49
不懂。。。
作者:
czrwinner
时间:
2011-3-15 19:22
定义一个CLASS就可以了,相关的方法封装到里面~
作者:
losingamong
时间:
2011-3-16 23:52
非常感谢,我也在研究。
作者:
weiwei
时间:
2011-3-19 20:22
請寫成class 或多使用function ,看你的樣子放個陣列也可以解決ㄅ
作者:
mysanaa
时间:
2014-8-5 19:37
研究研究。。。。
作者:
横穿马路
时间:
2016-7-2 04:07
谢谢楼主,好东西,支持下。
欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/)
Powered by Discuz! X3.2