Search in sources :

Example 1 with IP

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);
    }
}
Also used : ResisRelation(com.cas.circuit.vo.ResisRelation) IP(com.cas.circuit.vo.IP)

Example 2 with IP

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);
    }
}
Also used : ResisRelation(com.cas.circuit.vo.ResisRelation) IP(com.cas.circuit.vo.IP)

Example 3 with IP

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();
        }
    }
}
Also used : ElecCompDef(com.cas.circuit.vo.ElecCompDef) IP(com.cas.circuit.vo.IP) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Terminal(com.cas.circuit.vo.Terminal)

Example 4 with IP

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();
                }
            }
        }
    }
}
Also used : IP(com.cas.circuit.vo.IP) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) CR(com.cas.circuit.vo.CR)

Example 5 with IP

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);
    }
}
Also used : IP(com.cas.circuit.vo.IP)

Aggregations

IP (com.cas.circuit.vo.IP)13 CR (com.cas.circuit.vo.CR)6 ArrayList (java.util.ArrayList)5 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)5 ElecCompDef (com.cas.circuit.vo.ElecCompDef)3 ResisRelation (com.cas.circuit.vo.ResisRelation)2 Terminal (com.cas.circuit.vo.Terminal)2