⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 complex3d.pde

📁 This is processing for java examples.
💻 PDE
字号:
/** * PDF Complex * by Marius Watz (workshop.evolutionzone.com).  *  * Example using PDF to output complex 3D geometry for print. * Press "s" to save a PDF.*/import processing.opengl.*;import processing.pdf.*; // Trig lookup tables borrowed from Toxi. Cryptic but effectivefloat sinLUT[];float cosLUT[];float SINCOS_PRECISION=1.0;int SINCOS_LENGTH= int((360.0/SINCOS_PRECISION)); // System databoolean dosave=false;int num;float pt[];int style[]; void setup() {  size(600, 600, OPENGL);  frameRate(24);  background(255);    // Fill the tables  sinLUT=new float[SINCOS_LENGTH];  cosLUT=new float[SINCOS_LENGTH];  for (int i = 0; i < SINCOS_LENGTH; i++) {    sinLUT[i]= (float)Math.sin(i*DEG_TO_RAD*SINCOS_PRECISION);    cosLUT[i]= (float)Math.cos(i*DEG_TO_RAD*SINCOS_PRECISION);  }   num = 150;  pt = new float[6*num]; // rotx, roty, deg, rad, w, speed  style = new int[2*num]; // color, render style   // Set up arc shapes  int index=0;  float prob;  for (int i=0; i<num; i++) {    pt[index++] = random(PI*2); // Random X axis rotation    pt[index++] = random(PI*2); // Random Y axis rotation     pt[index++] = random(60,80); // Short to quarter-circle arcs    if(random(100)>90) pt[index]=(int)random(8,27)*10;     pt[index++] = int(random(2,50)*5); // Radius. Space them out nicely     pt[index++] = random(4,32); // Width of band    if(random(100)>90) pt[index]=random(40,60); // Width of band     pt[index++] = radians(random(5,30))/5; // Speed of rotation     // get colors    prob = random(100);    if(prob<30) style[i*2]=colorBlended(random(1), 255,0,100, 255,0,0, 210);    else if(prob<70) style[i*2]=colorBlended(random(1), 0,153,255, 170,225,255, 210);    else if(prob<90) style[i*2]=colorBlended(random(1), 200,255,0, 150,255,0, 210);    else style[i*2]=color(255,255,255, 220);    if(prob<50) style[i*2]=colorBlended(random(1), 200,255,0, 50,120,0, 210);    else if(prob<90) style[i*2]=colorBlended(random(1), 255,100,0, 255,255,0, 210);    else style[i*2]=color(255,255,255, 220);    style[i*2+1]=(int)(random(100))%3;  }} void draw() {   if(dosave) {    // set up PGraphicsPDF for use with beginRaw()    PGraphicsPDF pdf = (PGraphicsPDF)beginRaw(PDF, "pdf_complex_out.pdf");     // set default Illustrator stroke styles and paint background rect.    pdf.strokeJoin(MITER);    pdf.strokeCap(SQUARE);    pdf.fill(0);    pdf.noStroke();    pdf.rect(0,0, width,height);  }   background(0);   int index=0;  translate(width/2,height/2,0);  rotateX(PI/6);  rotateY(PI/6);   for (int i=0; i<num; i++) {    pushMatrix();     rotateX(pt[index++]);    rotateY(pt[index++]);     if(style[i*2+1]==0) {      stroke(style[i*2]);      noFill();      strokeWeight(1);      arcLine(0,0, pt[index++],pt[index++],pt[index++]);    }    else if(style[i*2+1]==1) {      fill(style[i*2]);      noStroke();      arcLineBars(0,0, pt[index++],pt[index++],pt[index++]);    }    else {      fill(style[i*2]);      noStroke();      arc(0,0, pt[index++],pt[index++],pt[index++]);    }     // increase rotation    pt[index-5]+=pt[index]/10;    pt[index-4]+=pt[index++]/20;     popMatrix();  }   if(dosave) {    endRaw();    dosave=false;  }}  // Get blend of two colorspublic int colorBlended(float fract,float r, float g, float b,float r2, float g2, float b2, float a) {   r2 = (r2 - r);  g2 = (g2 - g);  b2 = (b2 - b);  return color(r + r2 * fract, g + g2 * fract, b + b2 * fract, a);}  // Draw arc linepublic void arcLine(float x,float y,float deg,float rad,float w) {  int a=(int)(min (deg/SINCOS_PRECISION,SINCOS_LENGTH-1));  int numlines=(int)(w/2);   for (int j=0; j<numlines; j++) {    beginShape();    for (int i=0; i<a; i++) {       vertex(cosLUT[i]*rad+x,sinLUT[i]*rad+y);    }    endShape();    rad += 2;  }} // Draw arc line with barspublic void arcLineBars(float x,float y,float deg,float rad,float w) {  int a = int((min (deg/SINCOS_PRECISION,SINCOS_LENGTH-1)));  a /= 4;   beginShape(QUADS);  for (int i=0; i<a; i+=4) {    vertex(cosLUT[i]*(rad)+x,sinLUT[i]*(rad)+y);    vertex(cosLUT[i]*(rad+w)+x,sinLUT[i]*(rad+w)+y);    vertex(cosLUT[i+2]*(rad+w)+x,sinLUT[i+2]*(rad+w)+y);    vertex(cosLUT[i+2]*(rad)+x,sinLUT[i+2]*(rad)+y);  }  endShape();} // Draw solid arcpublic void arc(float x,float y,float deg,float rad,float w) {  int a = int(min (deg/SINCOS_PRECISION,SINCOS_LENGTH-1));  beginShape(QUAD_STRIP);  for (int i = 0; i < a; i++) {    vertex(cosLUT[i]*(rad)+x,sinLUT[i]*(rad)+y);    vertex(cosLUT[i]*(rad+w)+x,sinLUT[i]*(rad+w)+y);  }  endShape();} void keyPressed() {  if (key == 's') {     dosave=true;  }} void mouseReleased() {  background(255);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -