use of com.cas.circuit.vo.IP in project TeachingInSimulation by ScOrPiOzzy.
the class R method findAllIsopotential.
public static void findAllIsopotential(Terminal start, R r, boolean stopWhileTermElectricity) {
if (start.hasIsopotential(r.voltage.getEnv())) {
return;
}
if (stopWhileTermElectricity && start.getIsopotential().keySet().size() != 0) {
return;
}
// if (start == endTerminal) {
// System.out.println(str + "R.findAllIsopotential()");
// // return;
// }
IP isop = new IP(r.voltage);
r.isopoList.add(isop);
r.allIsopoList.add(isop);
// 1.收集与start连接头在同一电势位上的所有连接头
// 2.收集与start连接头在同一电势位上的所有是电阻一端的连接头
collectIsopotentialTerminal(start, isop, r);
List<ResisRelation> resisRelations = isop.getResisRelationList();
// }
for (ResisRelation resisRelation : resisRelations) {
findAllIsopotential(resisRelation.getTerm1(), r, false);
findAllIsopotential(resisRelation.getTerm2(), r, false);
}
}
use of com.cas.circuit.vo.IP in project TeachingInSimulation by ScOrPiOzzy.
the class R method findAllResisIsopotential.
/**
* DING找出从此端子开始联系到的所有端子,包括有电阻的(电压测量法)
* @param start
* @param r
* @param stopWhileTermElectricity
*/
private void findAllResisIsopotential(Terminal start, boolean stopWhileTermElectricity) {
if (start.hasIsopotential(voltage.getEnv())) {
return;
}
if (stopWhileTermElectricity && start.getIsopotential().keySet().size() != 0) {
System.err.println("有电了, stop");
return;
}
IP isop = new IP(voltage);
isopoList.add(isop);
allIsopoList.add(isop);
// 1.收集与start连接头在同一电势位上的所有连接头
// 2.收集与start连接头在同一电势位上的所有是电阻一端的连接头
collectResisIsopotentialTerminal(start, isop);
List<ResisRelation> resisRelations = isop.getResisRelationList();
for (ResisRelation resisRelation : resisRelations) {
findAllResisIsopotential(resisRelation.getTerm1(), false);
findAllResisIsopotential(resisRelation.getTerm2(), false);
}
}
use of com.cas.circuit.vo.IP in project TeachingInSimulation by ScOrPiOzzy.
the class R method shareVoltage.
public void shareVoltage() {
// 记录当前电路中涉及的连接头lastCircuitTerminal
List<Terminal> lastCircuitTerminal = new ArrayList<Terminal>();
for (IP ip : allIsopoList) {
addNonRepeatListAll(lastCircuitTerminal, ip.getTerminals());
// lastCircuitTerminal.addAll(ip.getTerminals());
}
int count = 0;
// 真实的分压操作
while (shareVoltageLocal()) {
count++;
if (count > 10) {
// 防止死循环
System.out.println("死循环啦");
break;
}
}
if (startIP == null || endIP == null) {
return;
}
// 找出分压后当前电路中的连接头thisCircuitTerminal
List<ElecCompDef> elecCompList = new ArrayList<ElecCompDef>();
List<Terminal> thisCircuitTerminal = new ArrayList<Terminal>();
for (IP ip : allIsopoList) {
addNonRepeatListAll(thisCircuitTerminal, ip.getTerminals());
// thisCircuitTerminal.addAll(ip.getTerminals());
// 找出所走到的连接头所属元器件,因为有些元器件如:开关电源,可算是一个电源的,当满足输入电压后,将输出电压
findElecComp(elecCompList, ip.getTerminals(), true);
}
// 过滤出电路没有走到的连接头,这些lastCircuitTerminal连接头即将清除电压
lastCircuitTerminal.removeAll(thisCircuitTerminal);
// 找出要被清理电压的连接头所属的元器件,因为有些元器件如:开关电源,可算是一个电源的将无法输出电压
findElecComp(elecCompList, lastCircuitTerminal, false);
// System.out.println("shareVoltage这些连接头 本次电路中没有走到" + lastCircuitTerminal);
// 即将清除电压
IP ip = null;
for (Terminal terminal : lastCircuitTerminal) {
// 当前电源的两个输出端,及与输出端子处于同电位的,【不】清除电压
if (!startIP.hasTerminal(terminal) && !endIP.hasTerminal(terminal)) {
ip = terminal.getIsopotential(voltage.getEnv());
if (ip != null) {
ip.detory();
}
terminal.removeVolt(voltage.getEnv());
}
}
for (ElecCompDef elecCompDef : elecCompList) {
if (elecCompDef != null) {
elecCompDef.doMagnetism();
}
}
}
use of com.cas.circuit.vo.IP in project TeachingInSimulation by ScOrPiOzzy.
the class R method mergeParallel.
/**
* @param ip
* @return
*/
@SuppressWarnings("unchecked")
private void mergeParallel(IP ip) {
if (passedIP.contains(ip)) {
return;
}
List<CR> crList = ip.getCRList();
if (crList.size() >= 2) {
IP anotherIsopo = null;
List<CR> runCRList = new ArrayList<CR>();
runCRList.addAll(crList);
for (CR cr : runCRList) {
anotherIsopo = cr.getAnotherIP(ip);
if (passedIP.contains(anotherIsopo)) {
continue;
}
if (anotherIsopo != null) {
List<CR> parallelCR = new ArrayList<CR>();
Util.intersection(parallelCR, ip.getCRList(), anotherIsopo.getCRList());
if (parallelCR.size() > 1) {
CR one = new CR(this);
one.setType(CR.PARALLEL);
for (CR parallel : parallelCR) {
one.attach(parallel);
}
one.merge();
}
}
}
}
}
use of com.cas.circuit.vo.IP in project TeachingInSimulation by ScOrPiOzzy.
the class R method mergeParallel.
/**
*/
private void mergeParallel() {
for (IP ip : isopoList) {
if (ip.getCRList().size() < 3) {
continue;
}
passedIP.clear();
mergeParallel(ip);
}
}
Aggregations