Created
October 3, 2020 10:36
-
-
Save usbharu/cbe688c31959277ead1e8ea2d27a9f2e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Wiring{ | |
protected color lineColor; | |
protected int lineStartPosX,lineStartPosY,lineEndPosX,lineEndPosY,deg,_ElineStartPosX,_ElineStartPosY,_ElineEndPosX,_ElineEndPosY; | |
Wires wires=new Wires(color(255,0,0)); | |
Wiring(color _lineColor){ | |
lineColor=_lineColor; | |
} | |
void addWire(int _lineStartPosX,int _lineStartPosY,int _lineEndPosX,int _lineEndPosY){ | |
translate(_lineStartPosX,_lineStartPosY); | |
float degFloat = degrees(atan2(_lineEndPosY-_lineStartPosY,_lineEndPosX-_lineStartPosX))+180; | |
translate(-_lineStartPosX,-_lineStartPosY); | |
deg=int(degFloat); | |
_ElineStartPosX=_lineStartPosX; | |
_ElineStartPosY=_lineStartPosY; | |
_ElineEndPosX=_lineEndPosX; | |
_ElineEndPosY=_lineEndPosY; | |
lineAngleFormating(20); | |
wires.addWire(lineStartPosX,lineStartPosY,lineEndPosX,lineEndPosY); | |
} | |
void update(){ | |
wires.update(); | |
} | |
public void groupWire(){ | |
wires.groupWire(); | |
} | |
private void lineAngleFormating(int decisionRange){ | |
if (deg<=360-decisionRange&°>=270+decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
lineEndPosX=_ElineEndPosX; | |
lineEndPosY=_ElineStartPosY-_ElineEndPosX+_ElineStartPosX; | |
}else if(deg<=90-decisionRange&°>=decisionRange){ | |
lineStartPosX=_ElineEndPosX; | |
lineStartPosY=_ElineStartPosY+_ElineEndPosX-lineStartPosX; | |
lineEndPosX=_ElineStartPosX; | |
lineEndPosY=_ElineStartPosY; | |
}else if(deg<=180-decisionRange&°>=90+decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
lineEndPosX=_ElineStartPosY-_ElineEndPosY+_ElineStartPosX; | |
lineEndPosY=_ElineEndPosY; | |
}else if(deg<=270-decisionRange&°>=180+decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
lineEndPosX=_ElineStartPosX+_ElineEndPosY-_ElineStartPosY; | |
lineEndPosY=_ElineEndPosY; | |
}else if(deg<=decisionRange||deg>=360-decisionRange){ | |
lineStartPosX=_ElineEndPosX; | |
lineEndPosY=_ElineStartPosY; | |
lineEndPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
}else if(deg<=180+decisionRange&°>=180-decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
lineEndPosX=_ElineEndPosX; | |
lineEndPosY=_ElineStartPosY; | |
}else if(deg<=90+decisionRange&°>=90-decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineEndPosY; | |
lineEndPosX=_ElineStartPosX; | |
lineEndPosY=_ElineStartPosY; | |
}else if(deg<=270+decisionRange&°>=270-decisionRange){ | |
lineStartPosX=_ElineStartPosX; | |
lineStartPosY=_ElineStartPosY; | |
lineEndPosX=_ElineStartPosX; | |
lineEndPosY=_ElineEndPosY; | |
}else{ | |
return; | |
} | |
} | |
protected class Wires{ | |
color lineColor; | |
protected ArrayList<Wire> wire = new ArrayList<Wire>(); | |
ArrayList<ArrayList<Integer>> id = new ArrayList<ArrayList<Integer>>(); | |
Wires(color _lineColor){ | |
lineColor=_lineColor; | |
} | |
void update(){ | |
for(int i = 0,len=wire.size();i<len;i++){ | |
wire.get(i).redraw(); | |
} | |
} | |
private void addWire(int _lineStartPosX,int _lineStartPosY,int _lineEndPosX,int _lineEndPosY){ | |
wire.add(new Wire(_lineStartPosX,_lineStartPosY,_lineEndPosX,_lineEndPosY,lineColor)); | |
ArrayList<Integer> a = new ArrayList<Integer>(); | |
a.add(wire.size()-1); | |
id.add(a); | |
printArray(id); | |
} | |
public void groupWire(){ | |
while(groupWireLoop()){} | |
} | |
private boolean groupWireLoop(){ | |
for(int i = 0,len=id.size();i<len;i++){ | |
ArrayList<Integer> b = new ArrayList<Integer>(); | |
for(int j = 0,lenj=id.get(i).size();j<lenj;j++){ | |
for(int k = 0,lenk=id.size();k<lenk;k++){ | |
if (k==i){ | |
continue; | |
} | |
for(int l = 0,lenl=id.get(k).size();l<lenl;l++){ | |
if(wire.get(id.get(i).get(j)).isCloss(wire.get(id.get(k).get(l)).lineStartPosX,wire.get(id.get(k).get(l)).lineStartPosY,wire.get(id.get(k).get(l)).lineEndPosX,wire.get(id.get(k).get(l)).lineEndPosY)){ | |
b=new ArrayList<Integer>(id.get(k)); | |
id.get(i).addAll(b); | |
id.remove(k); | |
return true; | |
} | |
} | |
} | |
} | |
} | |
return false; | |
} | |
} | |
class Wire{ | |
int lineStartPosX,lineStartPosY,lineEndPosX,lineEndPosY; | |
color lineColor; | |
Wire(int _lineStartPosX,int _lineStartPosY,int _lineEndPosX,int _lineEndPosY,color _lineColor){ | |
lineStartPosX=_lineStartPosX; | |
lineStartPosY=_lineStartPosY; | |
lineEndPosX=_lineEndPosX; | |
lineEndPosY=_lineEndPosY; | |
lineColor=_lineColor; | |
} | |
void redraw(){ | |
stroke(lineColor); | |
line(lineStartPosX,lineStartPosY,lineEndPosX,lineEndPosY); | |
} | |
boolean isCloss(int cx,int cy,int dx,int dy) { | |
int ax=lineStartPosX, ay=lineStartPosY, bx=lineEndPosX, by=lineEndPosY; | |
float ta = (((cx - dx) * (ay - cy)) + ((cy - dy) * (cx - ax))); | |
float tb = (((cx - dx) * (by - cy)) + ((cy - dy) * (cx - bx))); | |
float tc = (((ax - bx) * (cy - ay)) + ((ay - by) * (ax - cx))); | |
float td = (((ax - bx) * (dy - ay)) + ((ay - by) * (ax - dx))); | |
if (int(tc * td) < 0 && int(ta * tb) < 0){ | |
return true; | |
} | |
return false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment