|
本帖最后由 panhao1 于 2010-12-29 00:10 编辑
这个是在南方三校工作营做的一个东西
是在无比辛苦的评图结束之后的一个新建筑设计技术展示
是给3院长来体验加速传感器控制造型的设计方式
是多一些东西来调试参数 包括鼠标和操纵杆 陀螺仪 等输入设备
其实还可以加上其他元件 如压力传感器 光敏电阻等
基本的原理http://hi.baidu.com/processingqx/blog/item/954879ee85dc161ffcfa3c05.html
先看代码
主要是张拉膜结构的设计
这里参考了之前某哥们发的simonG particle的例子
这个类库是开源的 但是木有说明 所以看源代码凑合着运用吧
平台依旧是eclipse,介绍详见sky视屏教程
public class MeshImport {
ParticleSystem ps;
public ArrayList point=new ArrayList();
public ArrayList line=new ArrayList();
public ArrayList fixindex=new ArrayList();
public MeshImport(ParticleSystem pst) {
ps=pst;
}
public void read(String txt){
try {
FileReader read = new FileReader(txt);
BufferedReader br = new BufferedReader(read);
String row;
while((row = br.readLine())!=null){
String[] p=row.split(" ");
if (p.length==4){
float x=Float.parseFloat(p[1]);
float y=Float.parseFloat(p[3]);
float z=Float.parseFloat(p[2]);
Particle pa=new Particle( this.ps, x, y, z);
pa.visible=false;
point.add(pa);
}
else if(p.length==3){
int p1=Integer.parseInt(p[1]);
int p2=Integer.parseInt(p[2]);
Spring sp=new Spring(point.get(p1), point.get(p2));
sp.setRestToActualLength();
line.add( sp );
}
else if(p.length==2){
int fix=Integer.parseInt(p[1]);
fixindex.add(fix);
this.point.get(fix).fix();
}
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
////////////
}
public class t2 extends PApplet {
private static final long serialVersionUID = 1L;
PeasyCam cam;
Serial myPort;
int ax=0;
int ay=0;
int az=0;
boolean b1=false;
boolean b2=false;
int mx=0;
int my=0;
ParticleSystem ps;
MeshImport mesh;
int move;
Particle p;
////////////////////////////////////////////////////////
public void setup(){
size(800,600,OPENGL);
ps=new ParticleSystem(this);
ps.setGravity(-1);
ps.defaultMass = 0.5f;
ps.defaultSpringStrength = 1f;
ps.defaultSpringDamping = 0.1f;
cam = new PeasyCam(this, 200);
cam.setMinimumDistance(50);
cam.setMaximumDistance(5000);
strokeWeight(1);
stroke(255,50);
mesh=new MeshImport(ps);
mesh.read("F:/my.txt");
move=0;
int i =mesh.fixindex.get(move);
p=mesh.point.get(i);
///////////////////////////////
println(Serial.list());
myPort = new Serial(this, Serial.list()[12], 115200);
myPort.clear()
}
boolean sign1=false;
boolean sign2=false;
float x,y;
public void draw(){
background(0);
////////////////////////////////
if (b1){
move+=1;
if (move>mesh.fixindex.size()-1) move=0;
int i =mesh.fixindex.get(move);
p=mesh.point.get(i);
}
if (b2){
if (ax>85){ax=ax-85;}
if (ay>65){ay=ay-65;}
if (az>63){az=az-63;}
p.pos[2]=x+ax;
p.pos[0]=y+ay;
p.pos[1]=p.pos[1]+az;
}else{x=p.pos[2];y=p.pos[0];
if (mx>150){
p.pos[2]-=(mx-150)/50;
}
if (mx<130){
p.pos[2]+=(130-mx)/50;
}
if (my<120){
p.pos[0]+=(130-my)/50;
}
if (my>140){
p.pos[0]-=(my-140)/50;
}
}
/////////////////////////////////////////
pushMatrix();
translate(p.pos[0],p.pos[1],p.pos[2]);
box(1);
popMatrix();
ps.draw();
}
public void serialEvent(Serial myPort) {
String myString = myPort.;
if (myString != null) {
myString = trim(myString);
String strs[]=myString.split(",");
ax=Integer.parseInt(strs[0]);
ay=Integer.parseInt(strs[1]);
az=Integer.parseInt(strs[2]);
b1=true;b2=true;
if(Integer.parseInt(strs[3])==0)b1=false;
if(Integer.parseInt(strs[4])==0)b2=false;
mx=Integer.parseInt(strs[5]);
my=Integer.parseInt(strs[6]);
}
}
////////////////////////////////////////////////////////////////////////////
} |
评分
-
查看全部评分
|