Physik: Visualisieren der Lorentzkraft



  • Hm ... Da hast du eigentlich recht ...
    Andererseits bedeutet eine Änderung der Bewegungsrichtung eine Änderung der Geschwindigkeit in x-Achse und y-Achse. Insofern ändert sich die Geschwindigkeit dann doch. Mit meinem Code gibt das jedenfalls eine Spirale, wenn man Δt konstant macht ... Allerdings auch, wenn man es nicht konstant macht *lol* 😞



  • Ohne mir jetzt deinen Code und deinen Beitrag ganz oben genau anzugucken, vermute ich einfach mal, dass die Spirale an folgendem liegt:

    Dein Algorithmus berechnet die Bewegung des Elektrons "schrittweise". Dadurch kommt es zu Stande, dass sich die jeweils systematisch entstehenden Fehler aufsummieren und am Schluss so groß sind, dass aus dem Kreis leider eine Spirale geworden ist.

    Ich würde die schrittweise Berechnung, wenn möglich aufgeben und stattdessen versuchen, eine explizite Formel für die Trajektorie r(t) herzuleiten (oder wenn du etwas anderes brauchst eine entsprechende andere Formel, hab deinen Beitrag ja nicht wirklich gelesen ;)). Die Werte, die du darstellen mußt, erhälst du dann durch Einsetzen in die Formel.



  • Ich hab irgendwie das Gefühl, dass meine CalcNewElectronPosition nicht so das wahre ist ... Dort WIRD die Geschwindigkeit nämlich mehr. Sieht man gleich beim ersten Durchlauf: vy ist Null, deswegen bleibt vx gleich beim ersten mal. vy wird aber geändert, auf einen Wert größer null.
    Mir ist grad was aufgefallen: Der Geschwindigkeitsvektor beschreibt ja einen Kreis, vielleicht kann ich mir das irgendwie zu Nutze machen ... Mal n bissle rumspielen 🙂



  • Hm, hälst du es für so ne gute Idee, die Position von der Zeit abhängig zu machen? So ein Elektron ist verflucht schnell *g* -> Zeit ziemlich klein. Ausserdem müsste ich mit der Funktion dann zwei Werte berechnen: x und y ...



  • Und noch was: Ich brauch ja zu jedem Punkt die Kraft und auch die Geschwindigkeit! Meinst du, das geht überhaupt über die Bahnkurve? Das würde doch bedeuten, dass ich aus einem x- und einem y-Wert die Geschwindigkeit, die Richtung der Geschwindigkeit, die Kraft und die Richtung der Kraft herleiten kann. Das erscheint mir aber n bissle unwahrscheinlich, dass das möglich ist.



  • Was sollst du jetzt eigentlich nochmal genau ausrechnen? Oben hast du geschrieben, dass du die Lorentzkraft für diverse Punkte auf der entstehenden Kreisbahn ausrechnen sollst. Ist das alles?



  • Da hast du was falsch verstanden. Ich benötige die Lorentzkraft, BEVOR die Kreisbahn angezeigt wird, da ich noch ne elektrische Kraft mit einarbeiten muss (elektrische Feldlinien sind senkrecht zu den magnetischen Feldlinien und spannen sich zwischen zwei Kondensatorplatten auf)



  • Gehen wir mal anders an die Sache heran.

    1. Die Lorentzkraft ist hier die Zentripetalkraft, dass heißt, ihr Betrag ist immer m*omega^2*r und die Richtung ist immer in Richtung des Mittelpunktes des Kreises. r kann man mit dem Ansatz "Lorentzkraft = Zentripetalkraft" schnell an einem Punkt, an dem es leicht geht, ausrechnen.

    2. Die Geschwindigkeit ist konstant und steht immer senkrecht zur Lorentzkraft. Wenn du die Lorentzkraft für einen Punkt auf der Kreisbahn hast, kannst du somit auch leicht den Geschwindigkeitsvektor an der gegebenen Stelle berechnen.



  • dEUs schrieb:

    Da hast du was falsch verstanden. Ich benötige die Lorentzkraft, BEVOR die Kreisbahn angezeigt wird, da ich noch ne elektrische Kraft mit einarbeiten muss (elektrische Feldlinien sind senkrecht zu den magnetischen Feldlinien und spannen sich zwischen zwei Kondensatorplatten auf)

    Ach so. Dann geht das wohl doch nicht ganz so leicht. Naja, ich geh jetzt schlafen. Gute Nacht.



  • Jo, sonst hät ich schon längst einfach die Circle-Funktion verwendet 😉
    Kannst dir den Beitrag morgen bzw nachher nochmals anschauen. Danke für deine Hilfe soweit. Gute Nacht.



  • ok, habs hinbekommen 🙂

    struct SPoint
    {
    	double x;
    	double y;
    	operator CPoint()
    	{
    		return CPoint((int)x,(int)y);
    	}
    	bool operator==(const SPoint &p)
    	{
    		return x==p.x&&y==p.y;
    	}
    };
    
    struct SVector
    {
    	double X;
    	double Y;
    };
    
    struct SElectron
    {
    	SPoint Pos;
    	SVector Velocity;
    };
    
    const double ScaleFactor = 1.0;
    
    const double e = 1.6e-19;
    const double m = 9.1e-31;
    const double edivm = e/m; // e/m = 1.6*10^-19 C / 9.1*10^-31 kg
    double DeltaT1(double v,double F)
    {
    	double tmp = sqrt(pow(v,2)+(4.0*F*m));
    	double tmp2 = -v+tmp;
    	return tmp2/(2.0*F);
    }
    void CalcNewElectronPosition(SElectron *pElectron, float fB,float fU,float fR)
    {
    	double deltaT = 1e-9;
    	double dFLY = e*fB*pElectron->Velocity.X - e*fU/fR;
    	pElectron->Velocity.Y+=(dFLY/m*deltaT);
    
    	double dFLX = e*fB*(-pElectron->Velocity.Y);
    	pElectron->Velocity.X+=(dFLX/m*deltaT);
    
    	double dFL = sqrt(dFLX*dFLX+dFLY*dFLY);
    	double dV  = sqrt(pElectron->Velocity.X*pElectron->Velocity.X+pElectron->Velocity.Y*pElectron->Velocity.Y);
    
    	pElectron->Pos.x+=(pElectron->Velocity.X*deltaT)/0.00025;
    	pElectron->Pos.y+=(pElectron->Velocity.Y*deltaT)/0.00025;
    
    }
    
    void Plot(CDC *pDC, float fUb, float fB, float fU, float fR)
    {
    	SElectron e;
    	e.Pos.x=100;
    	e.Pos.y=150;
    	e.Velocity.X=sqrt(2.0*edivm*(double)fUb);
    	e.Velocity.Y=0;
    	int i=0; 
    	SPoint OldPos;
    	pDC->Arc(CRect(50,50,150,150),CPoint(100,150),CPoint(100,51));
    	while(i++<1000)
    	{
    		CalcNewElectronPosition(&e,fB,fU,fR);
    		if(!(e.Pos==OldPos)&&e.Pos.x>100&&e.Pos.x<300&&e.Pos.y>50&&e.Pos.y<250)
    		{
    			OldPos=e.Pos;
    			pDC->SetPixel(e.Pos,RGB(255,0,0));
    		}
    	}
    }
    

    Es ist defacto immer noch eine Spirale. Aber so nah am Kreis, dass es (a) nicht stört und dass man es (b) nicht bemerkt 🤡


Anmelden zum Antworten