Beispiel #1
0
int Wire::initSpeed()
{
    if(this->speed!=0) {
        return this->speed;
    }

    if(this->connected1!=NULL && this->connected1->getParentElement()->getName()=="Ground") {
        setSpeed(0);
        return 0;
    }

    if(this->connected1!=NULL) {
        if(connected1->getParentElement()->getName()=="Res") {
            Resistor* resTemp = (Resistor*)connected1->getParentElement();
            double tmpPotential = resTemp->getAnotherWire(this)->getPotential();
            if(tmpPotential>this->potential) {
                double i = abs(tmpPotential-this->potential)*resTemp->getValue();
                //i%=10;
                this->setSpeed((int)i);
                return i;
            } else {
                double i = abs(tmpPotential-this->potential)*resTemp->getValue();
                //i%=10;
                this->setSpeed((int)-i);
                return i;
            }
        } else if (connected1->getParentElement()->getName()=="Emf") {
            if(this->connected2==NULL) {
                EMF* emfTemp = (EMF*)connected1->getParentElement();
                int direction = emfTemp->getEmfDirection(this);
                QList<Wire*>::Iterator i;
                for(i=this->wires->begin();i!=wires->end();i++) {
                    if((*i)==this) {
                        continue;
                    }
                    this->speed+=(*i)->initSpeed();
                }
                this->speed*direction;
                return speed;
            }
    }
    }
        if(this->connected2!=NULL) {
            if(connected2->getParentElement()->getName()=="Res") {
                Resistor* resTemp = (Resistor*)connected2->getParentElement();
                double tmpPotential = resTemp->getAnotherWire(this)->getPotential();
                if(tmpPotential>this->potential) {
                    double i = abs(tmpPotential-this->potential)*resTemp->getValue();
                    //i%=10;
                    this->setSpeed((int)-i);
                    return i;
                } else {
                    double i = abs(tmpPotential-this->potential)*resTemp->getValue();
                    //i%=10;
                    this->setSpeed((int)i);
                    return i;
                }

           } else if (connected2->getParentElement()->getName()=="Emf") {
                if(this->connected1==NULL) {
                    EMF* emfTemp = (EMF*)connected2->getParentElement();
                    int direction = emfTemp->getEmfDirection(this);
                    QList<Wire*>::Iterator i;
                    for(i=this->wires->begin();i!=wires->end();i++) {
                        if((*i)==this) {
                            continue;
                        }
                        this->speed+=(*i)->initSpeed();
                    }
                    this->speed*direction;

                    return speed;
                }
        }
    }
}