0 Members and 1 Guest are viewing this topic.
I don't mind simulating particles first, but I would like to have buttons so that I could change the frequency and the speed of the wave easily. I think it should be interesting to compare different kind of waves.
I don't understand why you want to accelerate the first particle instantly though: why not accelerate it progressively with a button or a window to enter the acceleration rate and another one that we could hold to decide the duration of the acceleration?
<HTML><HEAD> <TITLE>Theory Simulation</TITLE> <script type="text/javascript">// window.setInterval("run()",10) // this will control how fast we repeat the action function run() { } function setup() // we might use this later { }// We'll create and initialise all our variables here:- y=-400; b=400; // initial x-coord locations of the dots bo=-50; // offset to correct b's display location r=400; g=-400; // initial locations of the bars ro=-87; go=-112; // offsets to correct bar display loc.s t=0; // time in zeptoseconds d=200; // distance in picometres f=1000; // initial bonding-light frequency per zeptosecond // milli, micro, nano, pico, femto, atto, zepto function moveiy() { y=y+1; iy.style.left=y; yloc.innerHTML=y; cd()} function moveib() { b=b+1; ib.style.left=b+bo; bloc.innerHTML=b; cd()} function moveir() { r-=1; ir.style.left=r+ro; rloc.innerHTML=r; cd()} function moveig() { g+=1; ig.style.left=g+go; gloc.innerHTML=g; cd()} function cd() // collision detection { if(r==y){ping1.innerHTML="PING"} if(g==b){ping2.innerHTML="PING"}} </script></HEAD><BODY onload="setup()" style="background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-size:18pt"><blockquote> <center><H1>Theory Simulation</H1><br><br><tt><b id="iy" style="position:relative;left:-400;top:0;font-size:60;color:yellow">.</b><b id="ib" style="position:relative;left:350;top:0;font-size:60;color:#0020ff">.</b><b id="ir" style="position:relative;left:313;top:2;font-size:18;color:red">|</b><b id="ig" style="position:relative;left:-512;top:2;font-size:18;color:#00ff00">|</b></tt></center><p><a id="yloc"></a> <a id="bloc"></a> <a id="ping1"></a><p><a id="rloc"></a> <a id="gloc"></a> <a id="ping2"></a><p> <input type="button" value="Move Yellow" onclick="moveiy()"/> <input type="button" value="Move Blue" onclick="moveib()"/> <input type="button" value="Move Red" onclick="moveir()"/> <input type="button" value="Move Green" onclick="moveig()"/><p>You can replace this text with your own to explain how to use the program.</BODY></HTML>
Providing controls for that will be possible, but you need to decide what the difference is between an unbonded particle interacting with particle A and particle A interacting with particle B which is bonded with it in some way.
<HTML><HEAD> <TITLE>Theory Simulation</TITLE> <script type="text/javascript"> window.setInterval("run()",8) // controls repetition rate function run() { t+=gr; // advance time by granularity unit ty+=gr; tb+=gr // advance time counters too r+=rv*gr; g+=gv*gr; // update bar positions if(ty>=fb){r=b; ty=0, cdr=0} // reuse old bars for new bars if(tb>=fy){g=y; tb=0; cdg=0} // ... when timers time out ir.style.left=r*4+ro; // calculate bars' new screen positions ig.style.left=g*4+go; // (4 units = one picometre) iy.style.left=y*4; // calculate particle screen positions ib.style.left=b*4+bo; yloc.innerHTML=y; bloc.innerHTML=b; // update screen. cd(); // call collision detection function } function setup() // we'll use this later { }// All variables are created and initialised here:- c=0.3 // speed of light in pm/zs. gr=1; // granularity for simulation in zeptoseconds // we can adjust this to speed/slow the action y=-100; b=100; // initial x-coord locations of the dots bo=-50; // offset to correct b's display location yv=0; yb=0; // initial speeds for particles r=100; g=-100; // initial locations of the bars ro=-87; go=-112; // offsets to correct bar display loc.s rv=-c; gv=c; // speeds for bars t=0; // time in zeptoseconds ty=0; // timer to emit new bars from yellow particle tb=0; // and another for blue particle d=200; // distance in picometres fy=1000; // initial bonding-light frequencies per zeptosecond fb=1000; // (one for each particle) [1000 = 1x10^18Hz] ry=0;gb=0;ry2=0;gb2=0;cdr=0;cdg=0; // collision detection var.s// (milli, micro, nano, pico, femto, atto, zepto) function cd() // collision detection { if(r<=y && cdr==0){ping1.innerHTML="ping"; ry=t; cdr=1} if(g>=b && cdg==0){ping2.innerHTML="pong"; gb=t; cdg=1} ry2=t-ry; gb2=t-gb; if(ry2==60){ping1.innerHTML=""} if(gb2==60){ping2.innerHTML=""} } function moveiy() // test routine for moving yellow particle { y=y+1} function moveib() // test routine for moving blue particle { b=b+1} </script></HEAD><BODY onload="setup()" style="background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-size:18pt"><blockquote> <center><H1>Theory Simulation</H1><br><br><tt><b id="iy" style="position:relative;left:-400;top:0;font-size:60;color:yellow">.</b><b id="ib" style="position:relative;left:350;top:0;font-size:60;color:#0020ff">.</b><b id="ir" style="position:relative;left:313;top:2;font-size:18;color:red">|</b><b id="ig" style="position:relative;left:-512;top:2;font-size:18;color:#00ff00">|</b></tt></center><p><a id="yloc"></a> <a id="bloc"></a> <a id="ping1"></a> <a id="ping2"></a><p> <input type="button" value="Move Yellow" onclick="moveiy()"/> <input type="button" value="Move Blue" onclick="moveib()"/><p>You can replace this text with your own to explain how to use the program.</BODY></HTML>
d=atē, which translates by: the length of a step = the rate of the acceleration times the duration of a step squared.For instance,for t=0 to 5, and for a=1, then d=0, 1, 4, 9, 16, 32for t=0 to 5, and for a=2, then d=0, 2, 8, 18, 32, 64
I tried to move the particles and I didn't succeed. I have to get used to many different new things, and it takes time because my short term memory is bad.
<HTML><HEAD> <TITLE>Theory Simulation</TITLE> <script type="text/javascript"> window.setInterval("run()",8) // controls repetition rate function run() { t+=gr; // advance time by granularity unit ty+=gr; tb+=gr // advance time counters too r+=rv*gr; g+=gv*gr; // update bar positions if(ty>=fb){r=b; ty=0, cdr=0} // reuse old bars for new if(tb>=fy){g=y; tb=0; cdg=0} // ... when timers time out ha=0.5*ya // get half y's acceleration value y+=yv+ha; // add y's old velocity+ha to its position yv+=ya; // add y's acceleration value to its velocity ha=0.5*ba // get half b's acceleration value b+=bv+ha; // add b's velocity+ha to its position bv+=ba; // add b's acceleration value to its velocity ir.style.left=r*4+ro; // calculate bars' newscreen position ig.style.left=g*4+go; // (4 units = one picometre) iy.style.left=y*4; // calculate particle screen positions ib.style.left=b*4+bo; yloc.innerHTML=y; bloc.innerHTML=b; // update screen. cd(); // call collision detection function } function setup() // we'll use this later { }// All variables are created and initialised here:- c=0.3 // speed of light in pm/zs. gr=1; // granularity for simulation in zeptoseconds // we can adjust this to speed/slow the action y=-100; b=100; // initial x-coord locations of the dots bo=-50; // offset to correct b's display location yv=0; bv=0; // initial speeds for particles r=100; g=-100; // initial locations of the bars ro=-87; go=-112; // offsets to correct bar display loc.s rv=-c; gv=c; // speeds for bars t=0; // time in zeptoseconds ty=0; // timer to emit new bars from yellow particle tb=0; // and another for blue particle d=200; // distance in picometres fy=1000; // initial bonding-light frequencies per zeptosecond fb=1000; // (one for each particle) [1000 = 1x10^18Hz] ha=0; // variable to store a value temporarily ya=0; // acceleration value applying to yellow ba=0; // acceleration value for blue particle ry=0;gb=0;ry2=0;gb2=0;cdr=0;cdg=0; // collision detection var.s// (milli, micro, nano, pico, femto, atto, zepto) function cd() // collision detection { if(r<=y && cdr==0){ping1.innerHTML="ping"; ry=t; cdr=1} if(g>=b && cdg==0){ping2.innerHTML="pong"; gb=t; cdg=1} ry2=t-ry; gb2=t-gb; if(ry2==60){ping1.innerHTML=""} if(gb2==60){ping2.innerHTML=""} } function incya() { ya+=0.001} function decya() { ya-=0.001} function moveiy() // test routine for moving yellow particle { y=y+1} function moveib() // test routine for moving blue particle { b=b+1} </script></HEAD><BODY onload="setup()" style="background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-size:18pt"><blockquote> <center><H1>Theory Simulation</H1><br><br><tt><b id="iy" style="position:relative;left:-400;top:0;font-size:60;color:yellow">.</b><b id="ib" style="position:relative;left:350;top:0;font-size:60;color:#0020ff">.</b><b id="ir" style="position:relative;left:313;top:2;font-size:18;color:red">|</b><b id="ig" style="position:relative;left:-512;top:2;font-size:18;color:#00ff00">|</b></tt></center><p><a id="yloc"></a> <a id="bloc"></a> <a id="ping1"></a> <a id="ping2"></a><p> <input type="button" value="Move Yellow" onclick="moveiy()"/> <input type="button" value="Move Blue" onclick="moveib()"/> <input type="button" value="Acc+" onclick="incya()"/> <input type="button" value="Acc-" onclick="decya()"/><p>You can replace this text with your own to explain how to use the program.</BODY></HTML>
The half is there because only half of the acceleration value is realised as new distance for each step while the full value of a is added to the speed by the end of the time slice.
The acceleration should change as the particles get closer together, but it might only change the speed when a bar hits the particle, which means the particle would accelerate in instantaneous jumps each time rather than smoothly.
I had thought that the big problem with deciding what the acceleration should be is that you'd need to count at least two bars and time the gap between them to work out the frequency, but actually you don't - all you need to do is work out the speed of the particle relative to the light to get a value that varies the same way as frequency (though you also ought to adjust for the slowing of functionality of the particle ("time dilation") that put that "bar" of light out because that will lower its frequency, and the speed of functionality of the particle receiving which may amplify it back up to a similar value, but we can modify the program to cover that later - we'll build it steadily piece by piece and add complexity over time).
The result is rather fun - see if you can keep the yellow particle on the screen, and see if you can stop it moving once you've started it.
Next time we'll have to add more code to use the bar-particle interactions to control the accelerations instead of the buttons, but if you can work out how the new parts of the existing program work, you might just know enough to be able to try some experimental programming of the next step yourself.
You seem to be giving importance to the collision with the bars during acceleration, and I think we should not.
What you are actually trying to figure out is how we are going to bring mass into consideration, and I find it difficult to simulate because the mass induced by the resistance to acceleration between the components is a lot more important that the one induced by the resistance to acceleration between the particles, and because what we are actually trying to simulate is only the steps between the particles.
I figured that, instead of accounting for the blueshift particle A would produce on incident light at the beginning of its acceleration, we could simplify the problem while accounting for it only at the end of its acceleration, but it doesn't seem to work, so the question remains: how do we account for blueshift during acceleration of particle A?
If we keep constant the frequency of the steps, it seems that there is only one way: their length has to be reduced a bit, and it has to be reduced a fraction of the blueshift: the more the blueshift, the more the reduction.
At each step forward, a small step backward would have to be subtracted.
Again, you seem to allow importance to the incoming bars during acceleration of particle A, and I think it is not necessary. On the other hand, it is necessary to account for them to accelerate particle B. If a bar strikes particle B just before it beeps, then particle B has to move away from particle A a bit. It cannot know how much it will have to move, it has to move until it beeps, so I guess it has to follow the bar during this time even if it is moving at c, because then, it would stay synchronized with it. I think that, this way, it will move the same distance particle A had moved before. How about programming the particles' beeps? We could then emit the bars continuously and observe the particles staying on sync with them if they are at the right distance from one another. The bars should also disappear when they are on sync with the particles, because the light emitted by the particle would interfere destructively with the incoming light. This way, during acceleration, we would see some bars escaping the system, which is also the case for light when we accelerate real particles in real accelerators.
I can almost stop it, but the motion is not constant: it slows down and accelerates when the computer does. I have too many windows opened in my browser for the computer speed to stay constant. Is that why you want a fast computer?
<HTML><HEAD> <TITLE>Theory Simulation</TITLE> <script type="text/javascript"> window.setInterval("run()",8) // controls repetition rate function run() { t+=gr; // advance time by granularity unit ty+=gr; tb+=gr // advance time counters too r+=rv*gr; g+=gv*gr; // update bar positions if(ty>=fb){r=b; ty=0, cdr=0; // reuse old bars for new pbv=bv} // store speed of b at this moment if(tb>=fy){g=y; tb=0; cdg=0; // ... when timers time out pyv=yv} // store speed of y at this moment ha=0.5*ya*a // get half y's acceleration value y+=yv+ha; // add y's old velocity+ha to its position yv+=ya*a; // add y's acceleration value to its velocity ha=0.5*ba*a // get half b's acceleration value b+=bv+ha; // add b's velocity+ha to its position bv+=ba*a; // add b's acceleration value to its velocity ir.style.left=r*4+ro; // calculate bars' newscreen position ig.style.left=g*4+go; // (4 units = one picometre) iy.style.left=y*4; // calculate particle screen positions ib.style.left=b*4+bo; yloc.innerHTML=y; bloc.innerHTML=b; // update screen data ping1.innerHTML=ya; ping2.innerHTML=ba; cd(); // call collision detection function } function setup() // we'll use this later { }// All variables are created and initialised here:- c=0.3 // speed of light in pm/zs. gr=1; // granularity for simulation in zeptoseconds // we can adjust this to speed/slow the action y=-100; b=100; // initial x-coord locations of the dots bo=-50; // offset to correct b's display location yv=0; bv=0; // initial speeds for particles pyv=0; pbv=0; // particle speeds when light sent out r=100; g=-100; // initial locations of the bars ro=-87; go=-112; // offsets to correct bar display loc.s rv=-c; gv=c; // speeds for bars t=0; // time in zeptoseconds ty=0; // timer to emit new bars from yellow particle tb=0; // and another for blue particle d=200; // distance in picometres fy=1000; // initial bonding-light frequencies per zeptosecond fb=1000; // (one for each particle) [1000 = 1x10^18Hz] a=0.001; // acceleration strength factor ha=0; // variable to store a value temporarily ya=0; // acceleration value applying to yellow ba=0; // acceleration value for blue particle cdr=0;cdg=0; // collision detection var.s// (milli, micro, nano, pico, femto, atto, zepto) function cd() // collision detection { if(r<=y && cdr==0){ya=pbv-yv; cdr=1} if(g>=b && cdg==0){ba=pyv-bv; cdg=1} } // When bar hits particle, we calculate new acceleration value.// The "ya=pbv-yv" above calculates the speed (and thereby energy) of the red// bar relative to both the particle it came from and the one it has just hit so// that we can generate a new acceleration value from this to act on the hit// particle. function inca() // increase strength of acceleration force { a*=2; force.innerHTML=a} function deca() // decrease strength of acceleration force { a*=0.5; force.innerHTML=a} function nudgey() // accelerate y to right { yv+=0.001} function nudgeb() // accelerate b to left { bv-=0.001} </script></HEAD><BODY onload="setup()" style="background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-size:18pt"><blockquote> <center><H1>Theory Simulation</H1><br><br><tt><b id="iy" style="position:relative;left:-400;top:0;font-size:60;color:yellow">.</b><b id="ib" style="position:relative;left:350;top:0;font-size:60;color:#0020ff">.</b><b id="ir" style="position:relative;left:313;top:2;font-size:18;color:red">|</b><b id="ig" style="position:relative;left:-512;top:2;font-size:18;color:#00ff00">|</b></tt></center><p>Yellow's location = <a id="yloc"></a><br>Blue's location = <a id="bloc"></a><p>Latest acceleration applied to yellow particle = <a id="ping1"></a><br>Latest acceleration applied to blue particle = <a id="ping2"></a><p>Fundamental force strength = <a id="force">0.001</a><p> <input type="button" value="Force +" onclick="inca()"/> <input type="button" value="Force -" onclick="deca()"/> <input type="button" value="Nudge yellow right" onclick="nudgey()"/> <input type="button" value="Nudge blue left" onclick="nudgeb()"/><p>Click a "nudge" button to start things moving.</BODY></HTML>
Mechanistically, that needs the particles to have in-built clocks which aren't slowed by their speed of travel through space so that they can maintain a constant step rate. They would then decelerate if they receive a bar sooner than normal and accelerate if it's late. That would run into a problem though because the leading particle would always receive the signal from the trailing particle late while the trailing one would receive the other signal early, so they would get further and further apart as the front one keeps accelerating and the following one keeps decelerating.
What happens if the particles are already moving and something acts on the front one to decelerate it? That would lead to the particles becoming closer together as they slow down. We'll be able to test that with the simulation, but there are a lot of things that clearly won't work and really shouldn't need to be tested.
I'll postpone the acquisition of a new machine because they keep getting better over time and it's always best to wait as long as you can.
The program simply calculates an acceleration force whenever a bar hits a particle by comparing the speeds of the receiving particle and the source particle (using the speed of the source particle when that bar was sent out from it rather than its current speed because they aren't always the same if you've nudged a particle). This provides an energy value equivalent to the Doppler shift.
The bond in question is the one that permits atoms to form molecules, or that permits nucleons to form nucleus.
Hi Phity,You're right about the kind of bonds, but the idea is to consider that those bonds are executed at no more than the speed of light, and then simulate what could happen if we accelerate the system. In fact, it is a relativity issue applied to the scale of particles. Do you know how to handle JavaScript?
While accelerating both particles before their acceleration had the time to accelerate the other particle, I succeeded to contract them to less than zero distance, so that they were crisscrossing each other continuously. I could even imagine that they were orbiting one around the other. Then I accelerated them more, and they began staying on the wrong side of the screen, sending their bars away from the other particle, nevertheless continuing to make an effect on one another, as if the software was sending invisible bars between them.
We get the same kind of result when we try to use light to produce orbital motion between two bodies: they begin to swirl away from one another. My model should help us to analyze that problem. When we nudge particle A, we automatically contract the distance between the two particles, but also between the bars, so I think that if a bar would be emitted at each beep, the first bar to be out of sync with particle B would strike it too soon, not too late, and since it is the inverse for particle B, its bars would strike particle A too late, not too soon. Since the frequency of the bars is very low on the simulation, I could contract the distance a lot because I could nudge A a lot of times before it emitted a bar that would account for the acceleration. With bars emitted at a higher frequency, the distance between the bars would contract sooner and the bars would thus nudge the other particle sooner.
Nevertheless, I think that the particles would not stay at a constant distance from one another after the acceleration would have stopped. Why? Because we cannot account for the steps between their components. Nature accounts for them, and it even accounts for the steps between their own components, but a simulation cannot.
Maybe we could account for a constant change in distance between the two particles while correcting the distance constantly as soon as the acceleration would have stopped, and as long as we wouldn't change the speed of the system. That's what they do for the GPS: they check the satellites' clocks at constant intervals, and they correct them if they are a bit out of sync with the earthbound ones. Fortunately, it doesn't prevent the system from working properly.
In my model, no motion with regard to ether means no doppler effect between the particles, so if we accelerate the system to the right and stop it afterwards, there shouldn't be any doppler effect left between the particles. If contraction happens at acceleration and if we stop the system after a while, contraction should also resorb, not increase. It might increase for a while and then rebound the same way a balloon contracts and rebounds. How to stop the system without getting a rebound is another problem. It probably has to be slowed down progressively until it hits a limit that the particles cannot account for.
It works when there is only one bar to account for, but if we had a thousand bars, we would need a thousand variables to account for them, and I suspect it would be too heavy.
If we had a thousand bars to account for the distance between the beeps from particle A, the bars would automatically bring the doppler shift to particle B, and it could move along with the bars to keep beeping on sync with them. Of course, a thousand bars might be too close to one another for us to observe the shift, but we could show only one out of ten and get a good enough picture.
I didn't have time to study the language today, but I'll have it tomorrow. I'm eager to be able to handle the software a bit.
Once you've got the blue particle to the left of the yellow one, you break the collision detection mechanism and get false hits which reset the acceleration forces. The hits occur as soon as a bar reaches or is found to be past its target particle, so once the particles have passed each other, you get an immediate false hit as soon as a new bar is sent out. That could be fixed by modifying the code in cd() to prevent a hit being registered if y>b: e.g. if(r<=y && cdr==0 && y<b){...etc. So, the orbiting is fake - once yellow is to the right of blue, the acceleration shouldn't be changed again unless it is already strong enough to bring yellow back to the left of blue.
The frequency of the bars is already 1000 times as high as visible light - we're running the simulation very slowly at the moment, and we're also using very high accelerations. I think it would be better not to keep applying the acceleration between the bars, but just to apply one acceleration at the time of each hit and then run the simulation a bit faster (but not so much faster that we can no longer see what the bars are doing). We can then use bigger accelerations, and importantly, the particles won't get out of control so easily if we increase the forces. Of course, the bars needn't only occur once per crest/trough of a wave - we can have 2,4, 8, maybe 16 or more of them because the receiving particle can compare them with some component of itself that oscillates at the same frequency (a clock) and which can continually tell when there's Doppler shift and react to it. We needn't show all the bars either - we can adjust the accelerations continually whether there's a bar shown on the screen reaching a particle or not. This would make everything much quicker at adjusting to speed changes of the other particle and keep things under better control.That would mean we don't need to speed up the sim and that we can keep the bars visible and moving at sensible speeds across the screen while having much more responsive action going on.
A simulation can do everything - you just have to work out what the rules are that it is to apply, and part of that will involve defining what a step is.
One thing shows up clearly from the existing simulation, and that is that just responding to Doppler shift with simple rules doesn't work - the particles get closer together as you accelerate them, but they also get closer together as you decelerate them.
You also have to work out what the results of a simulation actually say - when you see two particles taking turns to wobble a bit to the right and then to the left such that they're repeatedly getting further apart then closer together, that looks to me like heat energy which doesn't add to their combined motion, and it's energy that could be radiated off.
QuoteIf we had a thousand bars to account for the distance between the beeps from particle A, the bars would automatically bring the doppler shift to particle B, and it could move along with the bars to keep beeping on sync with them. Of course, a thousand bars might be too close to one another for us to observe the shift, but we could show only one out of ten and get a good enough picture.I don't know what you mean by having particles move along with the bars - we don't want the particles moving at c.
There's not much to it. The accelerations are calculated in cd() and are then applied in run(). I've made a new version in which the accelerations are only applied once per bar and where those accelerations are stronger, but it doesn't look greatly different and still goes out of control if you increase the fundamental acceleration force, so there's no point in posting it until I've created more "hidden bars" to adjust the accelerations more often - it should end up as a much better version of the program.
Why not emit a bar only when hitting the nudge button, and add a function to keep nudging as long as the button is on?
This way, if we would stop nudging A before the bar would hit B, we could better study the effect an acceleration of A would have on B and vice-versa. B should move the same way A had moved before, and A should stop moving at the same rate it took to accelerate, it should thus get at rest before the bar from B would have the time to begin nudging it again. In principle, the motion of each particle should look like a wave, and that wave should get more complex if we would go on nudging A after the bar would hit B.
The wave I'm describing is what I call a step, and if we were to account for the components, they would be making similar steps but at a much higher frequency. In fact, the numerous steps between the components would have to travel the same distance than one step between the particles, and in the same time. It would also be the light escaped from the numerous components' steps that would produce later on the step between the particles.
I'm not sure that we would get a contraction with what I am suggesting to try. I think that there would be no overall contraction if we would stop nudging A before the first bar hits B for example, but what would happen if we would go on nudging A is too complicated for me to figure out.
We could add a variable to tell us the distance between the two wavelike motion of the particles, but if we would use the beginning of the waves as a marker for instance, I think that the distance would always stay the same. The same reasoning would apply if we would nudge B away from A: it would create the same wavelike motion between the particles, and no difference in distance should be observed between the waves.
That wobbling happens because we are nudging the particles towards one another. If we could nudge them at the same time, they should vibrate on the spot. It is that deduction that made me guess such a vibration could be the cause for the increasing force we observe while compressing a solid body.
A particle has to begin moving when the wave arrives, and it has to stop moving when the wave leaves, so that was only a technical way for B to beep on sync with the wave with only a bar to guide its motion. I now think that if we nudge B with a bar that remembers A's nudge, and if A and B decelerate the same way they have accelerated, nudge by nudge, then we should get the wavelike motion I am talking about.
I'm trying to figure out how particle A would behave if we would stop the acceleration after a few nudges, and I have a hard time. A should stop moving after a while because it faces blueshift from B, but the same blueshift can be obtained during a long but weak acceleration, and during a short but strong one, a difference I think a real particle cannot account for just by considering the doppler effect it produces on the waves from the other particle.
The problem is simpler when doppler effect from A hits B: B only has to accelerate for its own waves to stay on sync with the waves from A, and it could decelerate the same way if it had that information from A. Of course, we could also consider that A would decelerate for its waves to get back on sync with the waves from B, but at what rate? We could also consider that it is B that is accelerating towards A, but we wouldn't know either its rate of deceleration.
<HTML><HEAD> <TITLE>Theory Simulation</TITLE> <script type="text/javascript"> window.setInterval("run()",8) // controls repetition rate function run() { t+=gr; // advance time by granularity unit ty+=gr; tb+=gr // advance time counters too // next we'll update the bar positions r+=rv*gr; g+=gv*gr; // first the visible bars r1+=rv*gr; g1+=gv*gr; // then the hidden bars r2+=rv*gr; g2+=gv*gr; r3+=rv*gr; g3+=gv*gr; r4+=rv*gr; g4+=gv*gr; r5+=rv*gr; g5+=gv*gr; r6+=rv*gr; g6+=gv*gr; r7+=rv*gr; g7+=gv*gr; r8+=rv*gr; g8+=gv*gr; r9+=rv*gr; g9+=gv*gr; r10+=rv*gr; g10+=gv*gr; r11+=rv*gr; g11+=gv*gr; r12+=rv*gr; g12+=gv*gr; r13+=rv*gr; g13+=gv*gr; r14+=rv*gr; g14+=gv*gr; r15+=rv*gr; g15+=gv*gr; // Next part reuses old bars for new ones, and it stores // speed of particle at time of new bar emission. if(ty>=fb){if(srb==16){srb=0} // identify bar to reuse ty=0; // reset count for the next reuse of a bar if(srb==0){r=b; cdr=0; pbv=bv} else{if(srb==1){r1=b; cdr1=0; pbv1=bv} else{if(srb==2){r2=b; cdr2=0; pbv2=bv} else{if(srb==3){r3=b; cdr3=0; pbv3=bv} else{if(srb==4){r4=b; cdr4=0; pbv4=bv} else{if(srb==5){r5=b; cdr5=0; pbv5=bv} else{if(srb==6){r6=b; cdr6=0; pbv6=bv} else{if(srb==7){r7=b; cdr7=0; pbv7=bv} else{if(srb==8){r8=b; cdr8=0; pbv8=bv} else{if(srb==9){r9=b; cdr9=0; pbv9=bv} else{if(srb==10){r10=b; cdr10=0; pbv10=bv} else{if(srb==11){r11=b; cdr11=0; pbv11=bv} else{if(srb==12){r12=b; cdr12=0; pbv12=bv} else{if(srb==13){r13=b; cdr13=0; pbv13=bv} else{if(srb==14){r14=b; cdr14=0; pbv14=bv} else{r15=b; cdr15=0; pbv15=bv; }}}}}}}}}}}}}}} srb+=1} if(tb>=fy){if(sgb==16){sgb=0} // same for green bars tb=0; if(sgb==0){g=y; cdg=0; pyv=yv} else{if(sgb==1){g1=y; cdg1=0; pyv1=yv} else{if(sgb==2){g2=y; cdg2=0; pyv2=yv} else{if(sgb==3){g3=y; cdg3=0; pyv3=yv} else{if(sgb==4){g4=y; cdg4=0; pyv4=yv} else{if(sgb==5){g5=y; cdg5=0; pyv5=yv} else{if(sgb==6){g6=y; cdg6=0; pyv6=yv} else{if(sgb==7){g7=y; cdg7=0; pyv7=yv} else{if(sgb==8){g8=y; cdg8=0; pyv8=yv} else{if(sgb==9){g9=y; cdg9=0; pyv9=yv} else{if(sgb==10){g10=y; cdg10=0; pyv10=yv} else{if(sgb==11){g11=y; cdg11=0; pyv11=yv} else{if(sgb==12){g12=y; cdg12=0; pyv12=yv} else{if(sgb==13){g13=y; cdg13=0; pyv13=yv} else{if(sgb==14){g14=y; cdg14=0; pyv14=yv} else{g15=y; cdg15=0; pyv15=yv; }}}}}}}}}}}}}}} sgb+=1} // Now we apply any accelerations & update particle positions ha=0.5*ya*a // get half y's acceleration value y+=yv+ha; // add y's old velocity+ha to its position yv+=ya*a; // add y's acceleration value to its velocity ha=0.5*ba*a // get half b's acceleration value b+=bv+ha; // add b's velocity+ha to its position bv+=ba*a; // add b's acceleration value to its velocity ya=0; ba=0; // prevent repeat accelerations for same bar // and now we update screen positions ir.style.left=r*4+ro; // calculate bars' newscreen position ig.style.left=g*4+go; // (4 units = one picometre) iy.style.left=y*4; // calculate particle screen positions ib.style.left=b*4+bo; yloc.innerHTML=y; bloc.innerHTML=b; // update screen data ping1.innerHTML=yv; ping2.innerHTML=bv; // And then we have to deal with bars hitting particles // This used to be done in a separate function called cd() // (the "cd" part standing for collision detection) if(r<=y && cdr==0){ya=pbv-yv; cdr=1} if(g>=b && cdg==0){ba=pyv-bv; cdg=1} if(r1<=y && cdr1==0){ya=pbv1-yv; cdr1=1} if(g1>=b && cdg1==0){ba=pyv1-bv; cdg1=1} if(r2<=y && cdr2==0){ya=pbv2-yv; cdr2=1} if(g2>=b && cdg2==0){ba=pyv2-bv; cdg2=1} if(r3<=y && cdr3==0){ya=pbv3-yv; cdr3=1} if(g3>=b && cdg3==0){ba=pyv3-bv; cdg3=1} if(r4<=y && cdr4==0){ya=pbv4-yv; cdr4=1} if(g4>=b && cdg4==0){ba=pyv4-bv; cdg4=1} if(r5<=y && cdr5==0){ya=pbv5-yv; cdr5=1} if(g5>=b && cdg5==0){ba=pyv5-bv; cdg5=1} if(r6<=y && cdr6==0){ya=pbv6-yv; cdr6=1} if(g6>=b && cdg6==0){ba=pyv6-bv; cdg6=1} if(r7<=y && cdr7==0){ya=pbv7-yv; cdr7=1} if(g7>=b && cdg7==0){ba=pyv7-bv; cdg7=1} if(r8<=y && cdr8==0){ya=pbv8-yv; cdr8=1} if(g8>=b && cdg8==0){ba=pyv8-bv; cdg8=1} if(r9<=y && cdr9==0){ya=pbv9-yv; cdr9=1} if(g9>=b && cdg9==0){ba=pyv9-bv; cdg9=1} if(r10<=y && cdr10==0){ya=pbv10-yv; cdr10=1} if(g10>=b && cdg10==0){ba=pyv10-bv; cdg10=1} if(r11<=y && cdr11==0){ya=pbv11-yv; cdr11=1} if(g11>=b && cdg11==0){ba=pyv11-bv; cdg11=1} if(r12<=y && cdr12==0){ya=pbv12-yv; cdr12=1} if(g12>=b && cdg12==0){ba=pyv12-bv; cdg12=1} if(r13<=y && cdr13==0){ya=pbv13-yv; cdr13=1} if(g13>=b && cdg13==0){ba=pyv13-bv; cdg13=1} if(r14<=y && cdr14==0){ya=pbv14-yv; cdr14=1} if(g14>=b && cdg14==0){ba=pyv14-bv; cdg14=1} if(r15<=y && cdr15==0){ya=pbv15-yv; cdr15=1} if(g15>=b && cdg15==0){ba=pyv15-bv; cdg15=1} } function setup() // we might use this later { }// All variables are created and initialised here:- c=0.3 // speed of light in pm/zs. gr=1; // granularity for simulation in zeptoseconds // we can adjust this to speed/slow the action y=-100; b=100; // initial x-coord locations of the dots bo=-50; // offset to correct b's display location yv=0; bv=0; // set initial speeds for particles pyv=0; pbv=0; // particle speeds when light bars sent out // more vars like pyv and pbv for hidden bars pyv1=0; pbv1=0; pyv2=0; pbv2=0; pyv3=0; pbv3=0; pyv4=0; pbv4=0; pyv5=0; pbv5=0; pyv6=0; pbv6=0; pyv7=0; pbv7=0; pyv8=0; pbv8=0; pyv9=0; pbv9=0; pyv10=0; pbv10=0; pyv11=0; pbv11=0; pyv12=0; pbv12=0; pyv13=0; pbv13=0; pyv14=0; pbv14=0; pyv15=0; pbv15=0; srb=0; sgb=0; // to keep track of which bars last sent rrb=0; rgb=0; // to keep track of which bars last received // srb = sent red bar, sgb = sent green bar, rrb = received red... // These will count up 1, 2, 3, 0, 1, 2, 3, 0, etc. // or up to 7 before going back to 0, or up to 15. r=100; g=-100; // initial locations of the bars ro=-87; go=-112; // offsets to correct bar display loc.s rv=-c; gv=c; // speeds for bars // more vars like r and g for hidden bars:- r1=0; g1=0; r2=0; g2=0; r3=0; g3=0; r4=0; g4=0; r5=0; g5=0; r6=0; g6=0; r7=0; g7=0; r8=0; g8=0; r9=0; g9=0; r10=0; g10=0; r11=0; g11=0; r12=0; g12=0; r13=0; g13=0; r14=0; g14=0; r15=0; g15=0; t=0; // time in zeptoseconds ty=0; // timer to emit new bars from yellow particle tb=0; // and another for blue particle d=200; // distance in picometres fy=64; // initial bonding-light "frequencies" fb=64; // (one for each particle) [1000 = 1x10^18Hz] // These aren't frequencies, but no. of zeptoseconds/cycle // Now using 250 to have four bars per cycle, three hidden. a=0.5; // acceleration strength factor ha=0; // variable to store a value temporarily ya=0; // acceleration value applying to yellow ba=0; // acceleration value for blue particle cdr=0;cdg=0; // collision detection var.s - these are used to // restrict it to one registered hit each time to // avoid false hits after bar has passed particle // more vars like cdr and cdg for hidden bars:- cdr1=0; cdg1=0; cdr2=0; cdg2=0; cdr3=0; cdg3=0; cdr4=0; cdg4=0; cdr5=0; cdg5=0; cdr6=0; cdg6=0; cdr7=0; cdg7=0; cdr8=0; cdg8=0; cdr9=0; cdg9=0; cdr10=0; cdg10=0; cdr10=0; cdg10=0; cdr11=0; cdg11=0; cdr12=0; cdg12=0; cdr13=0; cdg13=0; cdr14=0; cdg14=0; cdr13=0; cdg15=0;// (milli, micro, nano, pico, femto, atto, zepto) function inca() // increase strength of acceleration force { a*=2; force.innerHTML=a} function deca() // decrease strength of acceleration force { a*=0.5; force.innerHTML=a} function nudgey() // accelerate y to right { yv+=0.05} function nudgeb() // accelerate b to left { bv-=0.05} </script></HEAD><BODY onload="setup()" style="background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-size:18pt"><blockquote> <center><H1>Theory Simulation</H1><br><br><tt><b id="iy" style="position:relative;left:-400;top:0;font-size:60;color:yellow">.</b><b id="ib" style="position:relative;left:350;top:0;font-size:60;color:#0020ff">.</b><b id="ir" style="position:relative;left:313;top:2;font-size:18;color:red">|</b><b id="ig" style="position:relative;left:-512;top:2;font-size:18;color:#00ff00">|</b></tt></center><p>Yellow's location = <a id="yloc"></a><br>Blue's location = <a id="bloc"></a><p>Latest speed of yellow particle = <a id="ping1"></a><br>Latest speed of blue particle = <a id="ping2"></a><p>Fundamental force strength = <a id="force">0.5</a><p> <input type="button" value="Force +" onclick="inca()"/> <input type="button" value="Force -" onclick="deca()"/> <input type="button" value="Nudge yellow right" onclick="nudgey()"/> <input type="button" value="Nudge blue left" onclick="nudgeb()"/><p>Click a "nudge" button to start things moving.</BODY></HTML>
It would be possible to get the program to give you lists of numbers as to how the particles accelerated and decelerated, but you can get a fair idea of what those numbers would be just by watching how they behave visually. The relative motion of the particles is clearly damped.
-When we nudge A only once, there shouldn't be any damping after a while and there is: B should be making the same step A had made before and vice-versa.
-It also seems to accelerate faster than it decelerates, but it shouldn't be so since you use the same acceleration formula in both cases. Is there another reason why the two rates wouldn't be the same?
-The mean distance between the particles also reduces constantly after a while with only one nudge and it should not, unless we think that bodies should be shrinking with time.
-The speed of the particles also gets down with time after only one nudge and it should not, otherwise inertial motion would not be constant at our scale. Maybe the reason they do so is the same that causes the damping.
I discovered something interesting about a phenomenon that I considered a problem: since the distance light travels between the particles is longer to the right than to the left, they should be running like animals, making a long jump ahead with the rear legs because the front legs are getting away from them, and a short jump with the front legs because the rear legs are catching them.
About the deceleration A suffers after it has accelerated during the time it sends one bar, we can use its speed and decelerate it to rest during one bar too, but if it had accelerated during ten bars, how could it know it has to decelerate during ten bars?
It is interesting to note that even if this way, the atoms would stop moving inside the molecule, the molecule itself would not stop moving.
But this behavior causes a problem: during the time an atom would be waiting for the light from the other atom to come in, its components would always be moving, because it takes a lot less time for their light to make the roundtrip.
There's a problem with the timing of the nudges which leads to it having wildly different effects on the distance traveled by a particle before it is slowed or halted by a bar - it would be better if the nudges could only take place at times when that particle is also being hit by a bar rather than at any points between bar arrivals. I suspect this may also have allowed some energy to go missing. It shows how easy it is for bugs to mess up even a simple program.
The damping is caused when the fundamental force is set to 0.5 or lower because that spreads the effect from one time slice over two or more slices, and over time that spreads the responses across all 16 time slices and thereby equalizes the speeds of the two particles (if you wait long enough). Click the "Force+" button to set it to 1 instead of 0.5, and then you can see that the particles respond to each other by copying the each other's action each time without any damping. Higher values amplify the difference and send the particles ever faster in opposite directions, so they shouldn't be used.
I think this is getting closer to what you wanted to do from the start, so the bug needs to be fixed to make it happen. It will be interesting to see if it can be done in a way that ties in with relativity's length-contraction, and maybe it can once we add in the effects of relativistic mass (which is, after all, the real cause of length-contraction anyway).
QuoteAbout the deceleration A suffers after it has accelerated during the time it sends one bar, we can use its speed and decelerate it to rest during one bar too, but if it had accelerated during ten bars, how could it know it has to decelerate during ten bars?That's easy enough - each bar carries a stored value with it for the speed of the particle that it came from recorded at the time when it left, so if you have an acceleration in each of ten time slices, they will be delivered to the other particle by ten different bars and it will respond in ten time slices too.
QuoteBut this behavior causes a problem: during the time an atom would be waiting for the light from the other atom to come in, its components would always be moving, because it takes a lot less time for their light to make the roundtrip.Spread out particles where you can't pin down where and when they are... Sounds familiar, so not necessarily a problem. Anyway, I'll see if I can fix the program and then we can advance it further.