http://tm.spbstu.ru/api.php?action=feedcontributions&user=188.243.39.146&feedformat=atom Department of Theoretical and Applied Mechanics - User contributions [en] 2024-03-29T13:10:36Z User contributions MediaWiki 1.27.3 http://tm.spbstu.ru/?title=Ivan_Vsevolodovich_Meshcherskiy&diff=8975 Ivan Vsevolodovich Meshcherskiy 2017-01-18T16:11:58Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Иван Всеволодович Мещерский]]<br /> [[File:Mesherskij2.jpg|120px|left]] <br /> [[File:Mesch.jpg|right|600px]] <br /> It is no coincidence that at the opening of the St. Petersburg Polytechnic Institute, on October the 3rd, 1902, the first lecture to students of the technical faculties (metallurgic, electromechanical and shipbuilding) was read by Professor Ivan Vsevolodovich Meshcherskiy (1858-1935).<br /> He had been a chairman of Theoretical Mechanics Department since the day of its establishment in 1902 up to 1930 and played a significant role in theoretical mechanics teaching not only in Russia, but all over the world.<br /> Being one of the scientists who brought teaching mechanics in high technical schools closer to the needs of the engineering practice he, with all the Department staff, published «Theoretical Mechanics Problems» problem book and introduced practical trainings (exercises) for students.<br /> The first printed issue of the problem book was published in 1914, the last one, the 37th, in 1998. On January the 15th, 1893, at a St.Petersburg Mathematical Society meeting, he read the paper called «Dynamics of variable-mass body» that greatly promoted development of native rocket industry.<br /> Ivan Vsevolodovitch had a broad area of interests, it can be seen from the titles of his articles: «Hydrodynamic analogy of rolling», «A variable-mass dynamics problem», «Differential motion equations of gyroscopic monorail carriage», «Theoretical research of manometric tube», «Current state of the question about mechanical units», «B.K. Bobylev’s proceedings on hydrodynamics».<br /> From 1907 to 1908 I.V. Meshcherskiy has been the principal of the St.Petersburg Polytechnic Institute.<br /> <br /> '''Fun fact:'''<br /> Meshcherskiy is also an impact crater that is located on the Moon's far side, to the east-northeast of the larger Ostwald.<br /> <br /> <br /> == Links ==<br /> <br /> * [http://www.spbstu.ru/history/rectors/mecshersky.html I.V. Meshcherskiy's page on the University site]<br /> * [http://en.wikipedia.org/wiki/Ivan_Vsevolodovich_Meshcherskiy I.V. Meshcherskiy on Wikipedia]</div> 188.243.39.146 http://tm.spbstu.ru/?title=History&diff=8974 History 2017-01-18T16:10:29Z <p>188.243.39.146: </p> <hr /> <div>[[ru:История кафедры &quot;Теоретическая механика&quot;]]<br /> &lt;!--&lt;StatisticYaGoog/&gt;--&gt;<br /> <br /> =='''Ivan Vsevolodovich Meshcherskiy'''==<br /> [[File:Mesherskij2.jpg|120px|left]] <br /> [[File:Mesch.jpg|right|600px]] <br /> It is no coincidence that at the opening of the St. Petersburg Polytechnic Institute, on October the 3rd, 1902, the first lecture to students of the technical faculties (metallurgic, electromechanical and shipbuilding) was read by Professor Ivan Vsevolodovich Meshcherskiy (1858-1935).<br /> He had been a chairman of Theoretical Mechanics Department since the day of its establishment in 1902 up to 1930 and played a significant role in theoretical mechanics teaching not only in Russia, but all over the world.<br /> Being one of the scientists who brought teaching mechanics in high technical schools closer to the needs of the engineering practice he, with all the Department staff, published «Theoretical Mechanics Problems» problem book and introduced practical trainings (exercises) for students.<br /> The first printed issue of the problem book was published in 1914, the last one, the 37th, in 1998. On January the 15th, 1893, at a St.Petersburg Mathematical Society meeting, he read the paper called «Dynamics of variable-mass body» that greatly promoted development of native rocket industry.<br /> Ivan Vsevolodovitch had a broad area of interests, it can be seen from the titles of his articles: «Hydrodynamic analogy of rolling», «A variable-mass dynamics problem», «Differential motion equations of gyroscopic monorail carriage», «Theoretical research of manometric tube», «Current state of the question about mechanical units», «B.K. Bobylev’s proceedings on hydrodynamics».<br /> From 1907 to 1908 I.V. Meshcherskiy has been the principal of the St.Petersburg Polytechnic Institute.<br /> <br /> <br /> == '''Yevgeny Leopoldovich Nicolai''' ==<br /> [[File:Nikolai.gif|left|120px]]<br /> [[File:Nikolai.000014.JPG|170px|right]] <br /> [[File:Nikolai.000011.JPG|270px|right]]<br /> [[File:Nikolai.000021.JPG|270px|right]]<br /> <br /> Yevgeny Leopoldovich Nicolai, the honored worker of science and technology of the RSFSR (1880-1950) worked at the department since 1903. He headed the department from 1930 to 1936 and from 1944 to 1950. In 1916, Nicolai successfully defended his master’s thesis “On the problem of an elastic line with the double curvature”. After that, in June 1917, he was unanimously elected by Academic Senate of Petrograd Polytechnic University (presently named SPbSPU) as a professor at Department of Theoretical Mechanics.<br /> Professor Nicolai delivered lectures on theoretical mechanics and special courses on theory of elasticity, fluid mechanics, and machine dynamics at the Mechanical, Chemical and Industrial-Agricultural departments.<br /> While working as a lecturer Professor Nicolai concluded that existing course “Theoretical Mechanics” should be revised. He developed new lecture courses for the departments where he worked (Polytechnic University, Technologic University, University of Railway Engineering).<br /> On the base of the courses he compiled a fundamental textbook in two parts “Lectures on Theoretical Mechanics” (1922-1925). Soon this textbook became renowned in all the Russian technical universities and it opened a new era of teaching Mechanics. Until 1937 the first part of the textbook was reprinted for 11 times, and second – for 5 times. In the next years Nicolai published the third part, which included Euler-Lagrange equation and theory of small-amplitude oscillations. Finally, in 1939, the three parts of revised and updated textbook entitled “Theoretical Mechanics” was announced. Written with clarity and precision, this course provides the necessary knowledge to every engineer in theoretical mechanics and contains numerous illustrations of the laws of Mechanics.<br /> <br /> The versatile scientific activity of E.L. Nikolai quite clearly traces the history of formation and development of the four research areas: <br /> # the theory of elasticity, mainly the theory of deformation of thin rods and stability theory of rods; <br /> # the vibration theory; <br /> # the theory of gyroscopes and gyroscopic instruments; <br /> # the history of mechanics.<br /> <br /> In 1928, E.L. Nicolai read a report, entitled &quot;The stability of the rectilinear equilibrium shape of the twisted rod” that he became renowned for`. <br /> By this one and a number of his other works, E.L.Nikolai established himself as a recognized founder of a new scientific field, the theory of elastic stability of non-conservative systems. <br /> E.L. Nikolai actively participated in the development of a new field of industry, the gyroscopic instrumentation. <br /> Along with his research and teaching activities, Prof. E.L. Nikolai spent much time on the large scale organizational work: Vice-Rector for Academic Affairs (1920-1921), Dean of the Civil Engineering Faculty (1921-1923), Dean of the Physics and Mechanics Faculty (1930, 1937-1938). <br /> At the Physical and Mechanical Institute (1930-1934) he was head of the department of technical mechanics and opened new specialty &quot;Dynamic phenomena in machines and mechanisms&quot;, which now corresponds to &quot;Dynamics and strength of machines&quot; (Mechanics and Control Processes Department, MFF). <br /> Eugeny Leopoldovich initiated publishing of &quot;Applied Mathematics and Mechanics&quot; journal in our country; he was managing editor of &quot;Bulletin of Mechanics and Applied Mathematics&quot; of Leningrad Mechanical society; in 1933 it became the all-Union journal &quot;Applied Mathematics and Mechanics&quot; and E.L. Nikolai continued to be its managing editor until 1936.<br /> <br /> <br /> <br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> == '''Anatoly Isaakovich Lurie''' ==<br /> [[File:Lurie2.jpg|120px|left]]<br /> Anatoly Isaakovich Lurie, corresponding member of the USSR Academy of Sciences (1901-1980) headed the department from 1936 to 1944. He is the author (with L.G. Loitsiansky) of the widely known ”Theoretical Mechanics” textbook (1932), the latest edition of which was published in 1986. In this textbook, the classical mechanics was explicated using the vector analysis for the first time in Russia. Numerous tasks, which had not only illustrative, but also practical significance, was an important part of the textbook. Lurie is the author of eight books, including the fundamental monographs of an encyclopedic character: ”Analytical Mechanics” (1961), ”Theory of elasticity” (1970), ”Non-linear theory of elasticity” (1980). One can read more about Lurie’s miscellaneous scientific research in his [http://www.fea.ru/modules.php?name=Info&amp;pid=12 ‘memoirs’ on “Mechanics and control processes” department], which he headed from 1944 to 1976.<br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> == '''Georgy Nikolaevich Nikolsky''' ==<br /> <br /> Professor Georgy Nikolaevich Nikolsky headed the department from 1950 to 1954. He was a prominent expert in the field of automatic control processes and one of the authors of the first in the USSR unmanned aircraft system. <br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> == '''Nikolai Nikolaevich Polyakhov''' ==<br /> [[File:Poljahov.jpg|120px|left]] <br /> Professor Nikolai Polyakhov (1906-1987), honored Worker of Science and Technology of the RSFSR, headed the department from 1954 to 1955. He is the author of the well-known works on fluid mechanics and ”Theoretical Mechanics” textbook for the universities (in collaboration with S.A. Zegzhda and M.P. Yushkov).<br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> == '''Georgy lustinovich Janelidze''' ==<br /> Professor Georgy lustinovich Janelidze (1916-1964) headed the department from 1955 to 1964. His textbook ”Theoretical Mechanics in examples and problems”, written in collaboration with the department members M.I. Bat’ and A.S. Kelzon, became popular among Russian students. G.I. Janelidze was a dean of the Faculty of Physics and Mechanics from 1956 to 1964. He is an author of the well-known works on the general mechanics, mathematics, physics, medicine, theory of elasticity and plasticity, theory of naturally twisted rods. He wrote such monographs as, for example, “Statics of thin-walled rods” (1948, published in collaboration with Ya.G. Panovko) and “Vibratory displacement” (1964, with I.I.Blekhman). In his last monograph he had discovered new effects adopting the methods of the nonlinear theory of oscillations. The discovery has made possible the effective granular media transport. The transport process is carried out through an excitation of particles’ transverse oscillations.<br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> == '''Vadim Konstantinovich Prokopov'''==<br /> [[File:PROKOPOV.jpg|120px|left]] <br /> &lt;!--[[File:kaf1970.jpg|600px|right| Примерно 1970 год ---Мишин,---,С.Н.Григорьева,....,....,В.Н.Носов,И.Л.Лойцанская,М.В.Миронов,...Смелков,В.К.Прокопов,Р.З.Алиев,...Чечель,В.И.Беляева,...,А.В.Костарев,....,Н.В.Флорина,Ю.Е.Карякин,Б.И.Сотниченко,Ю.А.Груздев,...Иванов,В.ГЕмцов,....]]--&gt; <br /> Professor Vadim Konstantinovich Prokopov (1920-1998) was the head of the department from 1964 to 1989. He is an author of more than 50 scholarly publications. One of his undoubted achievements was the solution of the important three-dimensional problems of elasticity and convergence proof of the Papkovich method. V.K. Prokopov was the member of the Research and Methodology Committee on Theoretical Mechanics under the Ministry of Higher Education Institutions USSR and the member of the Head Committee on Mechanics under the Ministry of Higher Education Institutions USSR.<br /> <br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> =='''Pavel Andreevich Zhilin'''==<br /> [[File:Zhilin.jpg|120px|left]] <br /> [[File:kafJ.jpg|600px|right]]<br /> Professor Pavel Andreevich Zhilin (1942-2005) was the head of the department from 1989 to 2005. He was the member of Russian National Theoretical and Applied Mechanics Committee, the member of Presidium of the “Applied Mechanics” Research and Methodology Committee and member of the Research and Methodology Committee on Theoretical Mechanics under the Ministry of General and Professional Education of Russia. P.A.Zhilin was an academician of Saint-Petersburg Academy of Science on Strength Problems (SPAS). He published more than 150 scientific and methodological works. One of his main research directions was the extension of the methods of Rational Mechanics to non-mechanical fields such as Micro-physics and Electrodynamics. <br /> <br /> His main results are the following: development of the general theory of the elastic shells, without using static and kinematic hypothesis; general formulation of the fundamental laws of dynamics, applicable in the non-mechanical fields; development of the group theory for non-Euclidean tensors; introduction of a new solid body oscillator necessary for the multi-polar media development; establishing a theorem on the representation of the rotation groups, engaging the known findings on the subject; development of the modified electrodynamics equations describing not only transversal, but also longitudinal waves; derivation of the dynamic equations for the Kelvin media. This equation gives a strict mechanical interpretation of the Schrödinger and Klein-Gordon equations.<br /> &lt;br style=&quot;clear: both&quot; /&gt;<br /> <br /> =='''Anton Miroslavovich Krivtsov'''==<br /> [[File:Krivtsov_02.jpg|120px|left]] <br /> [[File:Kaf_TM.jpg|600px|right]]<br /> Professor [[A.M. Krivtsov|Anton Miroslavovich Krivtsov]] is the head of the department since 2005. He is the member of [http://www.ipmnet.ru/RNCTAM/ Russian National Theoretical and Applied Mechanics Committee] and the head of [http://mp.ipme.ru/ipme/labs/msm/MD_RG/index.html “Laboratory for Discrete Models in Mechanics” IPME RAS] since 2012. A.M. Krivtsov is also a scientific supervisor of [[Center for scientific and technical creativity|Center for scientific and technical creativity of the youth (SCY) SPbPU]]. A.M. Krivtsov was made a professor of RAS in 2015. His research interests lay in the different fields of Mechanics, Physics and mathematical modeling: dynamics of the rigid body; continuum mechanics; theory of the microstructured media; nanomechanics; theory of vibration processing of materials; astrophysics. The main direction of A.M. Krivtsov’s science work is the mathematical and computational modeling of the microstructured media based on the molecular dynamics and the particle dynamics methods. <br /> <br /> A.M. Kivtsov contributed to the development of the particle dynamics method. His contribution allowed to discover new effects that were difficult to describe by the means of continuum mechanics because of the discontinuities, arising in the case of large non-elastic deformation and fracture. The particle dynamics method allows to investigate such processes with regard to the internal structure of the media or model a system at the micro- or nanoscale level.</div> 188.243.39.146 http://tm.spbstu.ru/?title=Research_and_Education_Center_%22Biomechanics_and_Medical_Engineering&diff=8973 Research and Education Center "Biomechanics and Medical Engineering 2017-01-18T16:08:45Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Научно-образовательный центр &quot;Биомеханика и медицинская инженерия&quot;]]<br /> {{DISPLAYTITLE:&lt;span style=&quot;display:none&quot;&gt;{{FULLPAGENAME}}&lt;/span&gt;}}<br /> &lt;font size=&quot;5&quot;&gt; Research and Education Center (REC) &quot;Biomechanics and Medical Engineering &quot; &lt;/font&gt;<br /> <br /> [[File:Bio1.jpg|400px|thumb|right|]]<br /> == About the Center ==<br /> Research and Education Center &quot;Biomechanics and Medical Engineering&quot; was opened at SPbPU by order &quot;About the restructuring of SPbPU&quot; № 304, dated 03.04.2016. (Download pdf: [[media: Prikaz.304.pdf|290 Kb]])<br /> :Main objectives of the center are::<br /> *Organization and managing scientific, educational, research, innovation, and international activities;<br /> *Implementation of the research results and innovation in the educational process SPbPU;<br /> *Improving the quality of the educational process and providing a high level of scientific researches incorporated into SPbPU curricula;<br /> *Conducting fundamental and applied researches in the field of biomechanics and biomedical engineering;<br /> *Development and implementation of educational programs in neuroscience, biomechanics and medical engineering, organizing student practice, scientific research, seminars and workshops, planning and carrying out experiments;<br /> *3D printing development: manufacturing of items with complex geometry and structure, such as implants of internal organs and skeletal bones.<br /> <br /> == Directors of REC ==<br /> [[File:199.jpg|200px|thumb|right|]]<br /> [[File:15548.jpg|200px|thumb|right|]]<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> | &lt;center&gt;[[File:Loboda_main.jpg|110px]]&lt;/center&gt;<br /> | [[O.S. Loboda|Olga Loboda]], the '''Head of REC &quot;Biomechanics and Medical Engineering&quot;''', &lt;BR&gt; docent, Candidate of physico-mathematical sciences, Vice Head of [[Main Page|Department of Theoretical and Applied Mechanics]] for academic affairs, senior researcher at the Laboratory for [http://mp.ipme.ru/ipme/labs/msm/MD_RG/index.html &quot;Discrete Models in Mechanics (DMML)&quot;], Head of [[:ru:НИЛ Бионсис|Research laboratory &quot;Bionic systems&quot;]] &lt;BR&gt; '''e-mail:''' loboda_o@mail.ru<br /> |-<br /> | &lt;center&gt;[[File:Krivtsov_02.jpg|110px]]&lt;/center&gt;<br /> | [[Anton Krivtsov]], Scientific supervisor at '''REC &quot;Biomechanics and Medical Engineering&quot;''', &lt;BR&gt; Professor, Doctor of physico-mathematical sciences, Head of [[Main Page|Department of Theoretical and Applied Mechanics]], Head of [[:ru:НОЦ Газпромнефть-Политех|REC &quot;Gazpromneft-Politech&quot;]], Head of Laboratory [http://mp.ipme.ru/ipme/labs/msm/MD_RG/index.html &quot;Discrete Models in Mechanics (DMML)&quot;], Scientific supervisor at the [[Center for scientific and technical creativity|Center for scientific and technical creativity of the youth (SCY)]] &lt;BR&gt; '''e-mail:''' akrivtsov@bk.ru<br /> |-<br /> | &lt;center&gt;[[File:Nikolayvasiliev.JPG|110px]]&lt;/center&gt;<br /> |[http://science.spbstu.ru/personalities/nikolay_vasilev/ Nikolay Vasilyev], the scientific supervisor at '''REC &quot;Biomechanics and Medical Engineering&quot;''', &lt;BR&gt; researcher at Boston Children’s Hospital, Harvard Medical School, Boston Massachusetts, USA, the head of [http://science.spbstu.ru/laboratories/laboratoriya_meditsinskikh_tehnologiy/ Laboratory of Medical Technologies RASA] &lt;BR&gt; '''e-mail:''' nikolay.vasilyev@cardio.chboston.org<br /> |}<br /> <br /> == Projects ==<br /> * [[&quot;Bionic hand prosthesis&quot;]]<br /> <br /> == Laboratories ==<br /> * [[:ru:НИЛ Бионсис|Research laboratory Bionsis]]<br /> ::Research laboratory &quot;Bionic systems.&quot; The laboratory is focused on development in the area of bionic arms and legs prosthetics, remote control systems based on the muscle and brain activity. <br /> * [http://science.spbstu.ru/laboratories/laboratoriya_meditsinskikh_tehnologiy/ The laboratory of Medical Technology RASA]<br /> ::The laboratory is oriented towards modern surgical equipment development: surgical robots and machines, automated catheters, implantable devices, etc.<br /> <br /> == Educational activities ==<br /> '''[[Biomechanics and Medical Engineering |&quot;Biomechanics and Medical Engineering&quot; ]]'''<br /> :'''The goals of the program:''' The bachelor of science degree provides a solid background in mathematics and mechanics, advanced computational methods and information technologies; giving students essential knowledge and skills needed to solve various problems in biology.<br /> <br /> :The general concept of the educational program is based on a combination of fundamental disciplines and various courses giving an insight into the modern methods and equipment used in the field of biology and physiology, computing methods and software packages allowing to solve a wide range of interdisciplinary problems of mechanics and biology. <br /> <br /> :The level of training allows the graduates to continue their education in the magistracy or to choose other educational program.<br /> &lt;!--<br /> == References ==<br /> * [[News ticker REC &quot;Biomechanics and Medical Engineering&quot;]]<br /> * [[Department &quot;Theoretical and Applied Mechanics&quot;&quot;]]<br /> --&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=CNC_yacht&diff=8972 CNC yacht 2017-01-18T16:00:48Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Яхта с ЧПУ]]<br /> [[File:Nabl.jpg|300px|thumb|Yacht &quot;Nabl&quot;]]<br /> ==Contacts==<br /> * Sergey Le-Zakharov <br /> * Alexey Maistrov <br /> * Alexey Red'kov <br /> * Andrey Murachev <br /> * Dmitry Elets <br /> <br /> <br /> [http://vk.com/public_yacht_club_polytech VK page]<br /> <br /> ==Project goals and objectives==<br /> '''Objective:''' Developing an automatic control system for a sailing yacht.<br /> <br /> In order to achieve our goals, the following tasks need to be done:<br /> *Construction and installation of steering and hoisting sails mechanisms on the yacht<br /> *Equipping the yacht with onboard sensors (GPS, magnetic compass, wind sensor, accelerometer)<br /> *Hardware development: a control module, based on the Arduino controller able to receive signals from the sensors and provide a feedback signal for a closed-loop control.<br /> *Software development: a program tool that calculates an optimal route considering the information received from the sensors.<br /> <br /> <br /> <br /> The project is developing by [[:ru:Секция технического яхтинга|Technical Section of Yachting]].<br /> <br /> ==Completed Goals==<br /> <br /> Yacht &quot;Nubble&quot; (6.5 m), which is going to be equipped with an automatic control system, was purchased, renovated and launched on water.<br /> We developed a steering control system allowing to maintain a course. The work of the system was demonstrated at The XVII International Forum “Russian Industrialist” in LenExpo.<br /> <br /> ==Current Goals==<br /> <br /> *Developing a simple algorithm allowing to tack downwind (Maistrov, Red’kov, Murachev)<br /> *Choosing the best algorithm to control the tiller (Maistrov, Murachev, Red’kov)<br /> *Developing various of filtering algorithms, e.g. &quot;Kalman filter&quot; (A. Murachev)<br /> *Acquiring data from a magnetic compass, taking into account the yacht’s heeling effect (A. Maistrov)<br /> *The second option is an Android app with a yacht remote control interface, a map, and a data monitor (A. Red’kov)<br /> <br /> <br /> ==Solved problems==<br /> <br /> *Acquiring data from the GPS sensor and first versions of a path-tracing algorithm allowing to sail from point A to point B (A. Murachev)<br /> *The first version of the Android app for the yacht remote control (A. Red’kov)<br /> <br /> <br /> ==Press about us==<br /> *[http://vk.com/away.php?to=http%3A%2F%2Fwww.metronews.ru%2Fnovosti%2Fv-peterburge-postroili-jahtu-na-avtoupravlenii%2FTpomjv---j6gTGnFxStkW2%2F&amp;post=885003_5938 Newspaper &quot;Metro&quot;: &quot;An autopilot yacht built In St. Petersburg&quot;]<br /> <br /> *[http://www.piter.fm/share/7836/20131031/fromtime:18:30:13 &quot;Autoradio&quot; air from 31.10 at 18:30 (a part of a news broadcast about Fablab)].<br /> <br /> *[http://www.topspb.tv/news/news26429/ A broadcast on TV channel «St. Petersburg» about the self-steering gear&quot;]<br /> ==Participation in competitions and exhibitions==<br /> *June 2013: a victory in UMNIK competition <br /> *St.Petersburg International Innovation Forum “LenExpo”<br /> *Competition of small-size shipbuilding projects (2nd prize) <br /> *Exhibition &quot;VOLGA Boat Show 2013&quot;<br /> <br /> <br /> ==Market demands==<br /> <br /> The yacht should be capable of:<br /> *To follow the track that user drew with a finger<br /> *Track memory and a cyclic sailing option<br /> *Sonar function<br /> *&quot;Parktronic&quot; with a proximity sensor and a camera (optional)<br /> *Fail-safe autopilot automatically turning off at a speed over 20 km/h<br /> *Cruise control up to 35 km/h<br /> *GSM alarm system<br /> *Wireless speakers for the iPhone<br /> *Satellite tracking<br /> <br /> <br /> ==Informational resources==<br /> *[http://yachtingcalendar.ru/ Yachting calendar]</div> 188.243.39.146 http://tm.spbstu.ru/?title=Biomechanics_and_Medical_Engineering&diff=8971 Biomechanics and Medical Engineering 2017-01-18T15:55:51Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Биомеханика и медицинская инженерия]]<br /> {{DISPLAYTITLE:&lt;span style=&quot;display:none&quot;&gt;{{FULLPAGENAME}}&lt;/span&gt;}} <br /> &lt;font size=&quot;5&quot;&gt; Bachelor degree program &quot;Biomechanics and Medical Engineering&quot; &lt;/font&gt;<br /> <br /> <br /> == About the program ==<br /> '''''[http://www.spbstu.ru/departments/base/amm/index.asp Institute of Applied Mathematics and Mechanics]''''' <br /> <br /> '''Speciality Code''':''''' 010303 &quot;Mechanics and Mathematical Modeling&quot;'''''<br /> <br /> '''Supervisor''': '''''Dr. [http://mech.spbstu.ru/O.S._Loboda Olga S. Loboda]''''' Deputy Head of [http://mech.spbstu.ru/Main_Page Department of Theoretical and Applied Mechanics]<br /> <br /> '''Objectives:''' The bachelor of science degree provides a solid background in mathematics and mechanics, advanced computational methods and information technologies; giving students essential knowledge and skills needed to solve various problems in biology.<br /> <br /> The general concept of the educational program is based on a combination of fundamental disciplines and various courses giving an insight into the modern methods and equipment used in the field of biology and physiology, computing methods and software packages allowing to solve a wide range of interdisciplinary problems of mechanics and biology.<br /> <br /> <br /> The level of training allows the graduates to continue their education in the magistracy or to choose other educational program.<br /> <br /> == Training requirement ==<br /> <br /> Duration: 4 years for the fellowship training program.<br /> <br /> '''Qualification awarded:''' Upon successful completion of the course, students are awarded the qualification of Bachelor of Mechanics and Mathematical Modeling.<br /> <br /> == Main Disciplines ==<br /> <br /> [[File: Kinetic-chain-running.jpg|400px|thumb|right|]]<br /> <br /> * Physics <br /> * Numerical methods <br /> * Theoretical mechanics <br /> * Mathematical analysis <br /> * Biomechanics <br /> * Computing biomechanics <br /> * Numerical methods for biomechanical problems. <br /> * Chemistry <br /> * Introduction to Continuum Mechanics<br /> * Informatics<br /> * Rigid body dynamics<br /> * Mathematical physics <br /> * Mechanics of live systems and biomaterials <br /> * Theory of elasticity <br /> * Tensor algebra and tensor analysis <br /> * Oscillations in biological systems <br /> * Introduction to biological thermodynamics <br /> * Methods of anatomical and physiological researches<br /> <br /> <br /> == Program Staff ==<br /> <br /> [[File: Blood.jpg|300px|thumb|right]]<br /> <br /> The share of the teachers having an academic degree and/or an academic status in total number of the teachers providing educational process on this educational program makes more than 70 percent, not less than 10 percent of teachers have an academic degree of the doctor of science.<br /> <br /> * Prof. [http://mech.spbstu.ru/Anton_Miroslavovich_Krivtsov Anton M. Krivtsov], Head of Department &quot;Theoretical and Applied Mechanics&quot; <br /> <br /> * Prof. Belyaev A. K. <br /> <br /> * Prof. [http://tm.spbstu.ru/Ivanova Elena A. Ivanova]<br /> <br /> * Dr. [http://mech.spbstu.ru/O.S._Loboda Olga S. Loboda]<br /> <br /> * Dr. [http://mech.spbstu.ru/Vitaly_Kuzkin?rdfrom=http%3A%2F%2Ftm.spbstu.ru%2F%3Ftitle%3DVitaly_Kuzkin%26redirect%3Dno Vitaly A. Kuzkin]<br /> <br /> * Dr. Alexander A. Le-Zakharov<br /> <br /> * Dr. I.B. Suslova<br /> <br /> * Dr. Milhail B. Babenkov <br /> <br /> * Dr. Elena N. Vilchevskaya <br /> <br /> * Dr. Artem Yu. Panchenko<br /> <br /> * Dr. Ekaterina A. Podolskaya<br /> <br /> * Dr. Yu. A. Andrianov<br /> <br /> * Dr. S. P. Andrianova <br /> <br /> * Dr. A. G. Avramenko<br /> <br /> * Dr. A.V. Basov<br /> <br /> * Dr. S.F. Burdakov<br /> <br /> * Dr. V.I. Sushkov<br /> <br /> * Dr. A.B. Smirnov<br /> <br /> * Dr. Roman A. Filippov<br /> <br /> * Dr. S.A. Starovoytov<br /> <br /> * Dr. A.A. Moiseev<br /> <br /> * Dr Valeriy E. Hitrik<br /> <br /> * Dr. Yu.S. Chumakov<br /> <br /> * Dr. S.V. Kulik<br /> <br /> == Possible Places Of Practice ==<br /> <br /> * Federal Almazov North-West Medical Research Centre<br /> * Research laboratory of nano-microsystem equipment SPBSTU;<br /> * Russian state scientific center for robotics and technical cybernetics; <br /> * Clinic Pediatric Neurosurgery of A.L. Polenov RNSI, department of neurosurgery of children's age; <br /> * Baltic State Technical University &quot;Voenmeh&quot; D.F.Ustinov, research laboratory of neural network technologies<br /> * Medical and rehabilitation institutions, diagnostic centers;<br /> <br /> <br /> == Laboratories ==<br /> <br /> 1. '''''The Departments Laboratory''''': supercomputers, 3D-model of the crystal structures, models of machinery <br /> <br /> 2. [http://fablab.spbstu.ru/en/ '''''FabLab''''']: 3D-printers and other<br /> <br /> 3. [http://photomechanics.ru/ '''''&quot;Photomechanics'''&quot;'']: Equipment for high-speed photo and video<br /> <br /> == Information and methodological support ==<br /> <br /> The department has its own library containing specialized manuals and monographs written by professors of the department. The educational process is supported by the [http://library.spbstu.ru/ru/ SPbSTU Fundamental library]. Distance education is available through the [http://dl.spbstu.ru web portal]. All the bachelor disciplines will use [http://tm.spbstu.ru the wiki-website] to share online pilot projects, textbooks and tutorials and provide control over the educational process.<br /> <br /> == Possible Places Of Employment ==<br /> <br /> [[File: Model bio2.jpg|400px|thumb|right|]]<br /> * [http://www.siemens.com/entry/cc/en/ Siemens AG]<br /> * [http://www.samsung.com/ru/home/ Samsung Electronics Co ]<br /> * [http://www.almazovcentre.ru/ Federal Almazov North-West Medical Research Centre]<br /> * [http://www.rosturner.ru/ The Turner Scientific Research Institute for Children’s Orthopedics] <br /> * [http://www.iephb.ru/eng/index.htm I. M. Sechenov Institute of Evolutionary Physiology and Biochemistry]<br /> * [http://www.transas.ru Transas]<br /> * [http://www.energomash.ru/ Energomash Group] <br /> * engineering plant «Arsenal»<br /> * Geoscan<br /> * Pratt&amp;Whitney<br /> * CORNING (scientific center corning)<br /> * Almaz-Antey<br /> * Krylov State Research Centre<br /> * Central Research Institute Of Structural Materials “Prometey” <br /> * Engineering group Stroyproekt<br /> * B.E. Vedeneev VNIIG<br /> * ABBYY <br /> * Action Mediagroup<br /> * Clodo <br /> * and other...<br /> <br /> == Admission ==<br /> <br /> Students interested in Bachelor Degree Program &quot;Biomechanics and Medical Engineering&quot; please contact [http://mech.spbstu.ru/O.S._Loboda Olga S. Loboda], Deputy Head of Theoretical Mechanics Department.<br /> <br /> == Links ==<br /> <br /> * [http://mech.spbstu.ru/Main_Page Department of Theoretical and Applied Mechanics]</div> 188.243.39.146 http://tm.spbstu.ru/?title=Comparison_of_solitons_and_waves&diff=8970 Comparison of solitons and waves 2017-01-18T15:53:49Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Сравнение солитона с волной]]<br /> &lt;!--[[ТМ|Кафедра ТМ]] &gt; [[Проект &quot;Термокристалл&quot;]] &gt; [[Compare soliton with wave]] &lt;HR&gt;<br /> [[Виртуальная лаборатория]] &gt; [[Compare soliton with wave]] &lt;HR&gt;--&gt;<br /> <br /> To demonstrate a soliton propagation, we numerically solve the Korteweg–de Vries equation. It has the form:<br /> ::&lt;math&gt;\dot U + UU' + CU''' = 0&lt;/math&gt;.<br /> To obtain a numerical solution we successively calculate derivatives &lt;math&gt;U'&lt;/math&gt;, &lt;math&gt;U''&lt;/math&gt; and &lt;math&gt;U'''&lt;/math&gt;, using the central difference method:<br /> ::&lt;math&gt;U' = \frac{U_{n+1} - U_{n-1}}{2\Delta x}&lt;/math&gt;,<br /> ::&lt;math&gt;U'' = \frac{U_{n+2} - 2U_{n} + U_{n-2}}{4\Delta x} \approx \frac{U_{n+1} - 2U_{n} + U_{n-1}}{2\Delta x}&lt;/math&gt;,<br /> ::&lt;math&gt;U''' = \frac{U_{n+2} - 2U_{n+1} + 2U_{n-1} - U_{n-2}}{4\Delta x}&lt;/math&gt;.<br /> <br /> The soliton is indicated by the &lt;span style=&quot;color:#808&quot;&gt;purple outline&lt;/span&gt;, the moving wave is shown by a &lt;span style=&quot;background-color:#0bb&quot;&gt;turquoise gradient&lt;/span&gt;.<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Equations/Soliton_Wave_compare_v1/Equations.html |width=830 |height=640 |border=0 }}<br /> <br /> Coded by [[Tsvetkov Denis]], the code written by Alexander Yavorsky ([https://github.com/yavalvas/kdf-equation/blob/master/kdf_equation.cpp link]) was used to accomplish the work.<br /> <br /> &lt;!--[[Category: Виртуальная лаборатория]]<br /> [[Category: Проект &quot;Термокристалл&quot;]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Kelvin%27s_medium&diff=8969 Kelvin's medium 2017-01-18T15:51:04Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Одномерная среда Кельвина]]<br /> &lt;!--[[Виртуальная лаборатория]]&gt;[[One-dimensional Kelvin medium]] &lt;HR&gt;--&gt;<br /> Kelvin's one-dimensional medium is a chain consisting of masses interacting via a pair torque potential. In this example the masses are visualized by rods. <br /> The masses interact via the torque potential:<br /> ::&lt;math&gt;<br /> U = C({\bf n}_{1}\cdot{\bf n}_{2})<br /> &lt;/math&gt;,<br /> where &lt;math&gt;C&lt;/math&gt; is the interaction constant, &lt;math&gt;\bf{n}_1&lt;/math&gt;, &lt;math&gt;\bf{n}_2&lt;/math&gt; are the unit vectors bound to the masses. The interaction torque has the form:<br /> ::&lt;math&gt;<br /> {\bf M}_{1} = {\bf n}_{1}\times\frac{\partial U}{\partial {\bf n}_{1}} = C({\bf n}_{1}\times{\bf n}_{2})<br /> &lt;/math&gt;<br /> Then the motion equation for the k-th particle is as follows:<br /> ::&lt;math&gt;<br /> J\ddot{\bf \phi}_{k} = C(({\bf n}_{k}\times{\bf n}_{k+1}) + ({\bf n}_{k}\times{\bf n}_{k-1}))<br /> &lt;/math&gt;<br /> <br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/GregChig/Kelvin/kelvin.html |width=1140 |height=1550 |border=0 }}</div> 188.243.39.146 http://tm.spbstu.ru/?title=Dynamics_of_interacting_particles&diff=8968 Dynamics of interacting particles 2017-01-18T15:45:54Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Динамика взаимодействующих частиц]]<br /> [[Virtual laboratory]] &gt; [[Dynamics of interacting particles]] &lt;HR&gt;<br /> <br /> Here is the latest version of the program, which simulates the dynamics of interacting particles.<br /> Each particle is a viscoelastic sphere. The interaction between the spheres is described by the [[:ru:Потенциал_Леннард-Джонса|Lennard-Jones potential]]<br /> <br /> &lt;htmlet nocache=&quot;yes&quot;&gt;Tcvetkov/Balls/Balls_v6_release/Balls_v6_TM&lt;/htmlet&gt;<br /> <br /> Download program: [[Media:Balls_v6_release.zip|Balls_v6_release.zip]]<br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot;&gt;<br /> '''The text of the program is written in JavaScript (developed by [[Anton Krivtsov]], [[Tsvetkov Denis]]):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> File '''&quot;Balls_v6_release.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> function MainBalls(canvas, slider_01, text_01, slider_02, text_02) {<br /> <br /> canvas.onselectstart = function () {return false;}; // lock allocation canvas<br /> <br /> // Starting parameters<br /> <br /> var context = canvas.getContext(&quot;2d&quot;); // context for drawing<br /> canvas.oncontextmenu = function (e) {return false;}; // lock context menu<br /> <br /> var Pi = 3.1415926; // &quot;pi&quot;<br /> <br /> var m0 = 1; // weight<br /> var t0 = 1; // Time (period of fluctuation)<br /> var a0 = 1; // length (sphere's diameter)<br /> <br /> var g0 = a0 / t0 / t0; // acceleration<br /> var k0 = 2 * Pi / t0; // frequency<br /> var C0 = m0 * k0 * k0; // rigidity<br /> var B0 = 2 * m0 * k0; // viscosity<br /> <br /> // *** Physical parameters ***<br /> <br /> var Ny = 5; // The number of the spheres which are placed vertically<br /> var m = 1 * m0; // weight<br /> var CWall = 10 * C0; // wall's rigidity<br /> var CBall = 0.1 * CWall; // rigidity between spheres<br /> var BVisc = 0.008 * B0; // viscosity of the environment<br /> var BInternal = 0.01 * B0; // internal friction<br /> var BWall = 0.03 * B0; // viscosity of the walls<br /> var mg = 0.25 * m * g0; // gravitational force<br /> var r = 0.5 * a0; // radius of the sphere<br /> var K = 0.7; // forces depending on radius<br /> var a = 2 * r; // equilibrium state between particles<br /> var aCut = 2 * a; // cutting radius<br /> var TGoalK = 2; // temperature of the system TGoalK * D<br /> var TActualMaxK = 200; // maximum temperature when thermostat work<br /> <br /> // *** Calculation parameters ***<br /> <br /> var fps = 60; // frames per second<br /> var spf = 100; // steps per frame<br /> var dt = 0.04 * t0 / fps; // integration step<br /> <br /> // Running program <br /> <br /> var r2 = r * r; // optimizing<br /> var a2 = a * a; // optimizing<br /> var D = a2 * CBall / 72; // bond's energy between spheres<br /> var LJCoeff = 12 * D / a2; // coefficient for Lennard-Jones potential<br /> var b = Math.pow(13 / 7, 6) * a; // coefficient for SLJ potential<br /> var b2 = b * b; // optimizing<br /> var SLJDenominator = 1 / (aCut * aCut - b2); // denominator for calculation SLJ potential<br /> <br /> var thermostatEnabled = document.getElementById('checkbox_02').checked; // thermostat for viscosity of the environment <br /> var addRandomV = document.getElementById('checkbox_03').checked; // random speed for acceleration of the spheres<br /> var T0 = 1 * D; // temperature<br /> var TGoal = TGoalK * T0; // goal temperature <br /> var TActualMax = TActualMaxK * T0; // maximum temperature for thermostat<br /> var TActual = 0; // actual temperature <br /> var k = 1; // Boltzmann constant<br /> var Tk = m / k; // optimizing<br /> var viscFrictionTh = document.getElementById('checkbox_04').checked; // application thermostat for the viscosity environment<br /> var internalFrictionTh = document.getElementById('checkbox_05').checked; // application thermostat for the internal friction<br /> <br /> var Ka = K * a; // optimizing<br /> var K2a2 = K * K * a2; // optimizing<br /> <br /> var dNd = null; // taken sphere by cursor (drag &amp; drop)<br /> var grad; // gradient<br /> var SLJEnabled = document.getElementById('checkbox_01').checked;<br /> <br /> this.setSlider_01 = function(c) {mg = c * m * g0;}; // gravitation function<br /> this.setSlider_02 = function(c) {TGoal = c;}; // thermostat function<br /> this.setNy = function(ny) {<br /> Ny = ny;<br /> if (Ny &gt; 8) {<br /> grad = false; // gradient doesn't work if Ny &gt; 8<br /> context.fillStyle = &quot;#3070d0&quot;; // sphere's colour<br /> } else<br /> grad = true;<br /> };<br /> this.setNy(Ny); // start<br /> this.setCheckbox_01 = function(bool) {SLJEnabled = bool;};<br /> this.setCheckbox_02 = function(bool) {<br /> thermostatEnabled = bool;<br /> document.getElementById('checkbox_03').disabled = !bool;<br /> document.getElementById('checkbox_04').disabled = !bool;<br /> document.getElementById('checkbox_05').disabled = !bool;<br /> document.getElementById('slider_02').disabled = !bool;<br /> document.getElementById('text_02').disabled = !bool;<br /> if (bool) {<br /> TempIntervalID = setInterval( // update informtion about temperature<br /> function(){document.getElementById('Temperature').innerHTML = TActual.toFixed(3);}, 1000 / 3);<br /> }<br /> else {<br /> clearInterval(TempIntervalID); // delete updating informtion about temperature<br /> document.getElementById('Temperature').innerHTML = &quot;???&quot;<br /> }<br /> };<br /> this.setCheckbox_02(thermostatEnabled); // start for updating parameters<br /> this.setCheckbox_03 = function(bool) {addRandomV = bool;};<br /> this.setCheckbox_04 = function(bool) {viscFrictionTh = bool;};<br /> this.setCheckbox_05 = function(bool) {internalFrictionTh = bool;};<br /> <br /> // Setup of the interface<br /> <br /> slider_01.min = 0; slider_01.max = 5;<br /> slider_01.step = 0.05;<br /> slider_01.value = mg / m / g0; // the first position of the slider<br /> text_01.value = mg / m / g0;<br /> slider_02.min = 0; slider_02.max = 5;<br /> slider_02.step = 0.05;<br /> slider_02.value = TGoal; // the first position of the slider<br /> text_02.value = TGoal.toFixed(1);<br /> <br /> // Start of the new system<br /> <br /> // the following variables have to be recalculated every time when we change value Ny<br /> var scale, w, h;<br /> var rScale13, rScaleShift;<br /> this.newSystem = function() {<br /> scale = canvas.height / Ny / a0; // coefficient for transition from settlement to screen coordinates<br /> w = canvas.width / scale; // window width in settlement coordinates<br /> h = canvas.height / scale; // window height in settlement coordinates<br /> <br /> rScale13 = r * scale * 1.3; // optimizing<br /> rScaleShift = r * scale / 5; // optimizing<br /> <br /> this.setRandom(); // set random configuration<br /> };<br /> <br /> // Работа с мышью<br /> <br /> var mx_, my_; // cursor position<br /> <br /> canvas.onmousedown = function(e) { // function for press on the cursor<br /> var m = mouseCoords(e); // coordinates for calculation of the cursor position<br /> //return cycle<br /> for (var i = balls.length - 1; i &gt;= 0; i--) {<br /> var b = balls[i];<br /> var rx = b.x - m.x;<br /> var ry = b.y - m.y;<br /> var rLen2 = rx * rx + ry * ry; // length between cursor and sphere<br /> if (rLen2 &lt;= r2) { // the cursor has pressed on a sphere<br /> if (e.which == 1) { // mouse's left button has pressed<br /> dNd = b;<br /> dNd.xPlus = dNd.x - m.x; // shift of the cursor on X<br /> dNd.yPlus = dNd.y - m.y; // shift of the cursor on Y<br /> mx_ = m.x; my_ = m.y;<br /> canvas.onmousemove = mouseMove; // shift function work while button press<br /> } else if (e.which == 3) // mouse's right button has pressed<br /> balls.splice(i, 1); // delete sphere<br /> return;<br /> }<br /> }<br /> <br /> // if don't exit - add new sphere<br /> if (e.which == 1) {<br /> dNd = addNewBall(m.x, m.y, true); // add sphere and take it<br /> if (dNd == null) return; // return if the ball doesn't add<br /> dNd.xPlus = 0; dNd.yPlus = 0; // set ball in center position<br /> mx_ = m.x; my_ = m.y;<br /> canvas.onmousemove = mouseMove; // shift function works while mouse's button has pressed<br /> }<br /> };<br /> <br /> document.onmouseup = function(e) { // function when mouse's button let off<br /> canvas.onmousemove = null; // shift function equal null when mouse's button let of<br /> dNd = null; // ball doesn't exist when mouse's button let of<br /> };<br /> <br /> function mouseMove(e) { // shift function when left mouse's button pressed<br /> var m = mouseCoords(e); // coordinates for calculation<br /> dNd.x = m.x + dNd.xPlus;<br /> dNd.y = m.y + dNd.yPlus;<br /> dNd.vx = 0.6 * (m.x - mx_) / dt / fps; dNd.vy = 0.6 * (m.y - my_) / dt / fps;<br /> mx_ = m.x; my_ = m.y;<br /> }<br /> <br /> function mouseCoords(e) { // function returns settlement coordinates of the cursor of a mouse<br /> var m = [];<br /> var rect = canvas.getBoundingClientRect();<br /> m.x = (e.clientX - rect.left) / scale;<br /> m.y = (e.clientY - rect.top) / scale;<br /> return m;<br /> }<br /> <br /> // Работа с массивом<br /> <br /> var balls = []; // sphere's massive<br /> var addNewBall = function(x, y, check) {<br /> // check - whether is crossed a new sphere with walls or already existing spheres<br /> if (check) {<br /> if (x - r &lt; 0 || x + r &gt; w || y - r &lt; 0 || y + r &gt; h) return null;<br /> for (var i = 0; i &lt; balls.length; i++) {<br /> var rx = balls[i].x - x;<br /> var ry = balls[i].y - y;<br /> var rLen2 = rx * rx + ry * ry;<br /> if (rLen2 &lt; 4 * r2) return null;<br /> }<br /> }<br /> <br /> var b = [];<br /> <br /> b.x = x; b.y = y; // calculation cordinates<br /> b.fx = 0; b.fy = mg; // force<br /> b.vx = 0; b.vy = 0; // velocity<br /> <br /> balls[balls.length] = b; // add an element in end of massive<br /> return b;<br /> };<br /> <br /> this.setEmpty = function() {balls = [];}; // free area<br /> <br /> this.setRandom = function() { // random configuration<br /> balls = [];<br /> for (var i = 0; i &lt; 1000; i++)<br /> addNewBall(Math.random() * w, Math.random() * h, true);<br /> };<br /> <br /> var sqrt3 = Math.sqrt(3);<br /> this.setTriangularLattice = function() { // triangle lattice<br /> balls = [];<br /> var center = (w - Math.floor(w / r) * r) / 2; // shift<br /> for (var j = 0; j &lt; Math.floor(h / (sqrt3 * r)); j++)<br /> for (var i = 0; i &lt; Math.floor(w / r) - 1; i++)<br /> if ((i + j) % 2 == 0) addNewBall(r * (i + 1) + center, h - r * (1 + sqrt3 * j), false);<br /> };<br /> <br /> // program's cycle<br /> <br /> function control() {<br /> physics();<br /> draw();<br /> }<br /> <br /> // calculation part<br /> <br /> function physics() { <br /> for (var s = 1; s &lt;= spf; s++) {<br /> <br /> var BViscTh = BVisc;<br /> var BInternalTh = BInternal;<br /> // работа термостата<br /> if (thermostatEnabled) {<br /> if (balls.length &gt; 0) {<br /> var v2Sum = 0;<br /> for (var i1 = 0; i1 &lt; balls.length; i1++)<br /> v2Sum += balls[i1].vx * balls[i1].vx + balls[i1].vy * balls[i1].vy;<br /> var v2Average = v2Sum / balls.length;<br /> TActual = Tk * v2Average;<br /> <br /> if (addRandomV) { // random velocities if the temperature is low<br /> if (TGoal &gt; 0.15 &amp;&amp; TActual &lt; 0.1) {<br /> for (var i2 = 0; i2 &lt; balls.length; i2++) {<br /> balls[i2].vx += 0.3 * (1 - 2 * Math.random());<br /> balls[i2].vy += 0.3 * (1 - 2 * Math.random());<br /> }<br /> }<br /> }<br /> <br /> if (TActual &lt; TActualMax) { //because of the fact that a mouse spheres can set ultraboundary speed<br /> if (viscFrictionTh) BViscTh = BVisc * (TActual - TGoal); // thermostat<br /> if (internalFrictionTh) BInternalTh = BInternal * (TActual - TGoal); // thermostat<br /> }<br /> } else<br /> TActual = 0; // for thermostat on page<br /> }<br /> <br /> //recalculation of forces goes the certain massif since forces of interaction between spheres will be added further<br /> for (var i0 = 0; i0 &lt; balls.length; i0++) {<br /> balls[i0].fx = - BViscTh * balls[i0].vx;<br /> balls[i0].fy = mg - BViscTh * balls[i0].vy;<br /> }<br /> <br /> for (var i = 0; i &lt; balls.length; i++) {<br /> // calculation of interaction is made with all following spheres in the massif not to consider each interaction twice<br /> var b = balls[i];<br /> for (var j = i + 1; j &lt; balls.length; j++) {<br /> var b2 = balls[j];<br /> var rx = b.x - b2.x; var ry = b.y - b2.y; // vector on the first ball (b)<br /> var r2 = rx * rx + ry * ry; // length between spheres<br /> var rLen = (Math.sqrt(r2));<br /> if (rLen &gt; aCut) continue; // check for cutting radius<br /> <br /> // if the distance between particles isn't enough, forces will be counted like K * a<br /> if (rLen &lt; Ka) {<br /> if (rLen &gt; 0.00001) { // check<br /> rx = rx / rLen * Ka;<br /> ry = ry / rLen * Ka;<br /> }<br /> r2 = K2a2;<br /> rLen = Ka; <br /> }<br /> <br /> // сила взаимодействия<br /> var s2 = a2 / r2; var s4 = s2 * s2; // optimizing<br /> var F = LJCoeff * s4 * s4 * (s4 * s2 - 1); // LJ interaction force<br /> if (SLJEnabled) {<br /> var kSLJ; // k(r) - coefficient SLJ potential<br /> if (r &lt;= b) kSLJ = 1;<br /> else {<br /> var brackets = (r2 - b2) * SLJDenominator;<br /> kSLJ = 1 - brackets * brackets;<br /> } <br /> F *= kSLJ;<br /> }<br /> <br /> // internal friction between spheres<br /> if (r2 &lt; a2) {<br /> var vx21 = b.vx - b2.vx; var vy21 = b.vy - b2.vy; // vector on the first ball (b)<br /> var ex = rx / rLen; var ey = ry / rLen;<br /> var v = vx21 * ex + vy21 * ey;<br /> F -= F * BInternalTh / rLen * v;<br /> }<br /> <br /> // summirize forces<br /> var Fx = F * rx; var Fy = F * ry;<br /> <br /> b.fx += Fx; b.fy += Fy;<br /> b2.fx -= Fx; b2.fy -= Fy;<br /> }<br /> <br /> if (b == dNd) continue; // if the sphere is grabbed with the cursor - his interaction with walls and we don't consider movement<br /> <br /> if (b.y + r &gt; h) { b.fy += -CWall * (b.y + r - h) - BWall * b.vy; }<br /> if (b.y - r &lt; 0) { b.fy += -CWall * (b.y - r) - BWall * b.vy;}<br /> if (b.x + r &gt; w) { b.fx += -CWall * (b.x + r - w) - BWall * b.vx; }<br /> if (b.x - r &lt; 0) { b.fx += -CWall * (b.x - r) - BWall * b.vx; }<br /> <br /> b.vx += b.fx / m * dt; b.vy += b.fy / m * dt;<br /> b.x += b.vx * dt; b.y += b.vy * dt;<br /> }<br /> }<br /> }<br /> <br /> // drawing<br /> function draw() {<br /> context.clearRect(0, 0, w * scale, h * scale); // clear<br /> for (var i = 0; i &lt; balls.length; i++){<br /> var xS = balls[i].x * scale; var yS = balls[i].y * scale;<br /> if (grad) {<br /> // calculation of a gradient needs to be carried out for each sphere<br /> var gradient = context.createRadialGradient(xS, yS, rScale13, xS - rScaleShift, yS + rScaleShift, 0);<br /> gradient.addColorStop(0, &quot;#0000bb&quot;);<br /> gradient.addColorStop(1, &quot;#44ddff&quot;);<br /> context.fillStyle = gradient;<br /> }<br /> <br /> context.beginPath();<br /> context.arc(xS, yS, r * scale, 0, 2 * Math.PI, false);<br /> context.closePath();<br /> context.fill();<br /> }<br /> }<br /> <br /> // Start<br /> this.newSystem();<br /> setInterval(control, 1000 / fps);<br /> // function updates information on quantity of particles in the field<br /> setInterval(function(){document.getElementById('ballsNum').innerHTML = balls.length;}, 1000 / 20);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> Файл '''&quot;Balls_v6_release.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;meta charset=&quot;UTF-8&quot; /&gt;<br /> &lt;title&gt;Balls&lt;/title&gt;<br /> &lt;script src=&quot;Balls_v6_release.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;canvas id=&quot;canvasBalls&quot; width=&quot;800&quot; height=&quot;600&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;<br /> &lt;br&gt;<br /> &lt;div&gt;Gravitation: <br /> &lt;input type=&quot;range&quot; id=&quot;slider_01&quot; style=&quot;width: 150px;&quot; oninput=&quot;app.setSlider_01(this.value); document.getElementById('text_01').value = this.value;&quot;&gt;<br /> mg =<br /> &lt;input id=&quot;text_01&quot; style=&quot;width: 5ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> // if not the number is entered - the line won't pass validation on a pattern above, and checkValidity () will return false<br /> if (!this.checkValidity()) return;<br /> app.setSlider_01(this.value);<br /> document.getElementById('slider_01').value = this.value;<br /> &quot;&gt;<br /> ⋅ m ⋅ g0&lt;/div&gt;&lt;br&gt;<br /> <br /> &lt;div&gt;The number of the spheres which are placed vertically: <br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(3); app.newSystem();return false;&quot; value=&quot;3&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(4); app.newSystem();return false;&quot; value=&quot;4&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(5); app.newSystem();return false;&quot; value=&quot;5&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(7); app.newSystem();return false;&quot; value=&quot;7&quot;/&gt;<br /> &amp;nbsp; &lt;!--знак пробела--&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(9); app.newSystem();return false;&quot; value=&quot;9&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(12); app.newSystem();return false;&quot; value=&quot;12&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 30px&quot; name=&quot;&quot; onclick=&quot;app.setNy(15); app.newSystem();return false;&quot; value=&quot;15&quot;/&gt;<br /> &lt;/div&gt;&lt;br&gt;<br /> <br /> &lt;div&gt;Configuration:<br /> &lt;input type=&quot;button&quot; name=&quot;&quot; onclick=&quot;app.setTriangularLattice(); return false;&quot; value=&quot;Triangular lattice&quot;/&gt;<br /> &lt;input type=&quot;button&quot; name=&quot;&quot; onclick=&quot;app.setRandom(); return false;&quot; value=&quot;Systemless&quot;/&gt;<br /> &lt;input type=&quot;button&quot; name=&quot;&quot; onclick=&quot;app.setEmpty(); return false;&quot; value=&quot;A blank field &quot;/&gt;<br /> &lt;/div&gt;&lt;br&gt;<br /> <br /> &lt;div&gt;<br /> &lt;input type=&quot;checkbox&quot; id=&quot;checkbox_01&quot; name=&quot;&quot; onchange=&quot;app.setCheckbox_01(this.checked);&quot;/&gt;<br /> &lt;a href=&quot;/SLJ&quot; title=&quot;SLJ&quot; class=&quot;mw-redirect&quot;&gt;Short Lennard-Jones&lt;/a&gt; potential<br /> &lt;/div&gt;&lt;br&gt;<br /> <br /> &lt;div&gt;<br /> &lt;input type=&quot;checkbox&quot; id=&quot;checkbox_02&quot; name=&quot;&quot; onchange=&quot;app.setCheckbox_02(this.checked);&quot;/&gt;<br /> Thermostat: <br /> &lt;input type=&quot;range&quot; id=&quot;slider_02&quot; style=&quot;width: 150px;&quot; oninput=&quot;app.setSlider_02(this.value); document.getElementById('text_02').value = this.value;&quot;&gt;<br /> T ⋅ T0 = &lt;input id=&quot;text_02&quot; style=&quot;width: 5ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> // if not the number is entered - the line won't pass validation on a pattern above, and checkValidity () will return false<br /> if (!this.checkValidity()) return;<br /> app.setSlider_02(this.value);<br /> document.getElementById('slider_02').value = this.value;<br /> &quot;&gt;<br /> &lt;br&gt;<br /> &lt;input type=&quot;checkbox&quot; checked id=&quot;checkbox_03&quot; name=&quot;&quot; onchange=&quot;app.setCheckbox_03(this.checked);&quot;/&gt;Acceleration is achieved by random rates <br /> &lt;br&gt;<br /> The thermostat acts on: <br /> &lt;input type=&quot;checkbox&quot; checked id=&quot;checkbox_04&quot; name=&quot;&quot; onchange=&quot;app.setCheckbox_04(this.checked);&quot;/&gt;External friction<br /> &lt;input type=&quot;checkbox&quot; checked id=&quot;checkbox_05&quot; name=&quot;&quot; onchange=&quot;app.setCheckbox_05(this.checked);&quot;/&gt;Internal friction<br /> &lt;div&gt;T ≈ &lt;span id=&quot;Temperature&quot;&gt;&lt;/span&gt;&lt;/div&gt;<br /> &lt;/div&gt;&lt;br&gt;<br /> <br /> &lt;div&gt;Number of the particles: &lt;span id=&quot;ballsNum&quot;&gt;&lt;/span&gt;&lt;/div&gt;<br /> <br /> &lt;script type=&quot;text/javascript&quot;&gt;var app = new MainBalls(<br /> document.getElementById('canvasBalls'),<br /> document.getElementById('slider_01'),<br /> document.getElementById('text_01'),<br /> document.getElementById('slider_02'),<br /> document.getElementById('text_02')<br /> );&lt;/script&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> [[:ru:JavaScript_-_Balls|Here]] you can find the previous versions of the program. <br /> <br /> == The proposed development directions ==<br /> *Add temperature regulation by Hoover‘s thermostat.<br /> *The program's evaluation speed in order to optimize it. <br /> *Apply the [[:ru:Принцип копирования|copying principle]].<br /> *Add different potentials. <br /> *Add the ability to set viscoelastic walls anywhere.<br /> *Add the periodic boundary conditions. <br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> [[Category: Programming]]<br /> [[Category: JavaScript]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Chain&diff=8967 Chain 2017-01-18T15:44:18Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Динамика одномерного кристалла]]<br /> &lt;!--[[TM|Department of TM]] &gt; [[&quot;Thermo Crystal&quot; Project]] &gt; [[:ru:The dynamics of one-dimensional crystal]] &lt;HR&gt;<br /> [[Virtual laboratory]] &gt; [[:ru:The dynamics of one-dimensional crystal]] &lt;HR&gt; --&gt;<br /> <br /> Here is the latest version of the program that simulates the dynamics of one-dimensional crystal.<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Chain/Chain_v3_release/Chain_v3_release.html |width=1030 |height=440 |border=0 }}<br /> <br /> Download program: [[Media:Chain_v3_release.zip|Chain_v3_release.zip]]<br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The text of the program is written in JavaScript (developed by [[Tsvetkov Denis]]):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt;<br /> Файл '''&quot;Chain_v3_release.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> function MainChain(canvas, vCanvas) {<br /> <br /> // Presetting<br /> <br /> var context = canvas.getContext(&quot;2d&quot;); // context - for drawing<br /> var vContext = vCanvas.getContext(&quot;2d&quot;);// vContext - for drawing<br /> <br /> var Pi = 3.1415926; // pi<br /> <br /> var m0 = 1; // weight<br /> var T0 = 1; // Time (period of fluctuation)<br /> var a0 = 1; // length (sphere's diameter)<br /> <br /> var k0 = 2 * Pi / T0; // frequency<br /> var C0 = m0 * k0 * k0; // rigidity<br /> <br /> // *** Physical parameters ***<br /> <br /> var m = 1 * m0; // weight<br /> var C = 1 * C0; // rigidity<br /> var numStart = 24; // The number of the spheres<br /> <br /> // *** Calculation parameters ***<br /> <br /> var fps = 50; // frames per second<br /> var spf = 10; // steps per frame <br /> var dt = 0.4 * T0 / fps; // integration step<br /> // Running program<br /> <br /> var scale = canvas.height / a0; // large-scale coefficient for transition from settlement to screen coordinates<br /> var wScale = canvas.width; // window width in screen coordinates<br /> var hScale = canvas.height; // window hight in screen coordinates<br /> var w = wScale / scale; // window width in settlement coordinates<br /> var h = hScale / scale; // window high in settlement coordinates<br /> var chainHeightScale = hScale/2; // height of provision of a chain in screen coordinates<br /> // константы для графика скорости<br /> var vWScale = vCanvas.width; // window width in screen coordinates<br /> var vHScale = vCanvas.height; // window hight in screen coordinates<br /> var vHeightScale = vHScale/2; // height of provision of a chain in screen coordinates<br /> var vAxisScale = vHScale * 0.4; // scale of an axis of &quot;y&quot; of the schedule of speed<br /> var uvWResize = vWScale/wScale; // recalculation of width of rather main window<br /> <br /> // generate entry conditions<br /> <br /> var particles; // massive of particles<br /> var num, pDist; // quantity of particles and distance between spheres (in initial situation)<br /> MainChain.prototype.setNum = function(n){num = n; pDist = w/(num-1);}; // to set new quantity of particles<br /> MainChain.prototype.setNum(numStart);<br /> var uAxisScale; // scale of an axis of &quot;y&quot; of the schedule<br /> MainChain.prototype.newSystem = function(conf){<br /> MainChain.prototype.actualConf = conf;<br /> particles = [];<br /> for (var i = 1; i &lt; num + 1; i++) {<br /> var b = [];<br /> <br /> b.x0 = pDist*(i-1); // settlement coordinates of initial provision of a particle<br /> b.x0Scale = b.x0*scale; // screen coordinates of initial provision of a particle<br /> b.fu = 0; b.vu = 0; b.uu = 0; // force; velocity; shift of rather initial situation<br /> <br /> conf(b, i); // configuration of initial provisions<br /> particles[i] = b; // add an element to massive<br /> }<br /> <br /> // set periodic system<br /> particles[0] = particles[num];<br /> particles[num+1] = particles[1];<br /> <br /> // equilibration of total speed on an axis x (that particles didn't depart aside)<br /> var sumvu = 0;<br /> for (var i0 = 1; i0 &lt; num+1; i0++) sumvu += particles[i0].vu;<br /> var vuAverage = sumvu/num;<br /> for (var i1 = 1; i1 &lt; num+1; i1++) particles[i1].vu -= vuAverage;<br /> <br /> // control of an axis &quot;y&quot;<br /> var confCoeff = 1;<br /> if (conf == MainChain.prototype.conf_random) confCoeff = Math.sqrt(num)/6;<br /> if (conf == MainChain.prototype.conf_one || conf == MainChain.prototype.conf_stair2) confCoeff = num/5;<br /> if (conf == MainChain.prototype.conf_stair3) confCoeff = num/10;<br /> uAxisScale = hScale/(num/35) * confCoeff;<br /> };<br /> <br /> // control of configuration<br /> var v0 = 1*a0/T0; // conf_random - initial dispersion of speeds<br /> var sinNum = 2; // conf_sin - amount of the periods of a sine in a chain<br /> var hillDiv = 1/4; // conf_hill - part of a chain which is occupied by &quot;hill&quot;<br /> <br /> // configuration<br /> MainChain.prototype.conf_random = function(b){b.vu = v0*(2*Math.random()-1);};<br /> MainChain.prototype.conf_sin = function(b, i){b.vu = Math.sin(2*Pi * i/num*sinNum);};<br /> MainChain.prototype.conf_one = function(b, i){if (i == Math.ceil(num/2)) b.vu = 0.5; else b.vu = 0;};<br /> MainChain.prototype.conf_stair2 = function(b, i){if (i%4 == 0 || (i-1)%4 == 0) b.vu = 1; else b.vu = 0;};<br /> MainChain.prototype.conf_stair3 = function(b, i){if (i%6 == 0 || (i-1)%6 == 0 || (i-2)%6 == 0) b.vu = 1; else b.vu = 0;};<br /> MainChain.prototype.conf_hill = function(b, i){<br /> var nd2 = hillDiv *num/2; // quantity of particles at which initial speed / 2 will change<br /> if (i &gt; num/2-nd2 &amp;&amp; i &lt; num/2+nd2) b.vu = (1 - (i-num/2)*(i-num/2)/(nd2*nd2)); // parabola<br /> else b.vu = 0;<br /> };<br /> <br /> // Basis cycle of the program<br /> <br /> function control() {<br /> physics();<br /> draw();<br /> }<br /> <br /> // Settlement part of the program<br /> <br /> function physics(){<br /> for (var s=1; s&lt;=spf; s++) {<br /> for (var i=1; i&lt;particles.length-1; i++) {<br /> particles[i].fu = C*(particles[i+1].uu - 2*particles[i].uu + particles[i-1].uu);<br /> particles[i].vu += particles[i].fu / m * dt;<br /> }<br /> // we appropriate new movements<br /> for (var i2=1; i2 &lt; particles.length-1; i2++ ) particles[i2].uu += particles[i2].vu * dt;<br /> }<br /> }<br /> <br /> // drawing<br /> <br /> function draw(){<br /> function clearAndPrepairCtx(ctx, wS, hS, lineHeight){ // clear the screen and to draw the line in the middle<br /> ctx.clearRect(0, 0, wS, hS); // clear the screen<br /> ctx.strokeStyle = 'gray';<br /> ctx.beginPath();<br /> ctx.moveTo(0, lineHeight);<br /> ctx.lineTo(wS, lineHeight);<br /> ctx.stroke();<br /> ctx.strokeStyle = 'black';<br /> }<br /> <br /> // chain<br /> clearAndPrepairCtx(context, wScale, hScale, chainHeightScale);<br /> context.beginPath();<br /> context.moveTo(particles[1].x0Scale, chainHeightScale + particles[1].uu*uAxisScale);<br /> for (var i = 2; i &lt; particles.length-1; i++)<br /> context.lineTo(particles[i].x0Scale, chainHeightScale + particles[i].uu*uAxisScale);<br /> context.stroke();<br /> <br /> // schedule of speed<br /> clearAndPrepairCtx(vContext, vWScale, vHScale, vHeightScale);<br /> vContext.beginPath();<br /> vContext.moveTo(particles[1].x0Scale * uvWResize, vHeightScale + particles[1].vu*vAxisScale);<br /> for (var i0 = 2; i0 &lt; particles.length-1; i0++)<br /> vContext.lineTo(particles[i0].x0Scale * uvWResize, vHeightScale + particles[i0].vu*vAxisScale);<br /> vContext.stroke();<br /> }<br /> <br /> // Start of system<br /> <br /> MainChain.prototype.newSystem(MainChain.prototype.conf_hill);<br /> setInterval(control, 1000/fps);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Файл '''&quot;Chain_v2_release.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;title&gt;Chain&lt;/title&gt;<br /> &lt;script src=&quot;Chain_v3_release.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;table&gt;<br /> &lt;tr&gt;<br /> &lt;td&gt;u&lt;/td&gt;<br /> &lt;td&gt;&lt;canvas id=&quot;canvasChain&quot; width=&quot;800&quot; height=&quot;200&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;&lt;/td&gt;<br /> &lt;td rowspan=&quot;4&quot; style=&quot;width:200px&quot; valign=&quot;top&quot;&gt;<br /> Configurations&lt;br&gt;(guide the cursor at the button,&lt;br&gt;for seeing description):&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Casual speed at each part&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_random);return false;&quot; value=&quot;Random&quot;/&gt;&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Initial speed of particles is set by means of function of a sine&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_sin);return false;&quot; value=&quot;Sin&quot;/&gt;&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Speed is equal 0 at all parts, except one&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_one);return false;&quot; value=&quot;Impulse&quot;/&gt;&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Initial speed of particles is set by steps - two parts move, two don't move&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_stair2);return false;&quot; value=&quot;Stairs (2 particles)&quot;/&gt;&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Initial speed of particles is set by steps - three parts move, three don't move&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_stair3);return false;&quot; value=&quot;Stairs (3 particles)&quot;/&gt;&lt;br&gt;<br /> &lt;input type=&quot;button&quot; title=&quot;Initial speed of particles is set by the hill, the hill occupies 1/4 part of a chain&quot; style=&quot;width: 150px&quot; name=&quot;&quot; onclick=&quot;app.newSystem(app.conf_hill);return false;&quot; value=&quot;Hill&quot;/&gt;&lt;br&gt;<br /> &lt;br&gt;&lt;br&gt;<br /> &lt;div style=&quot;width:150px&quot;&gt;<br /> Quantity of particles:&lt;br&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(12); app.newSystem(app.actualConf);return false;&quot; value=&quot;12&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(24); app.newSystem(app.actualConf);return false;&quot; value=&quot;24&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(48); app.newSystem(app.actualConf);return false;&quot; value=&quot;48&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(96); app.newSystem(app.actualConf);return false;&quot; value=&quot;96&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(300); app.newSystem(app.actualConf);return false;&quot; value=&quot;300&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(600); app.newSystem(app.actualConf);return false;&quot; value=&quot;600&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(1200); app.newSystem(app.actualConf);return false;&quot; value=&quot;1200&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(2400); app.newSystem(app.actualConf);return false;&quot; value=&quot;2400&quot;/&gt;<br /> &lt;input type=&quot;button&quot; style=&quot;width: 40px&quot; name=&quot;&quot; onclick=&quot;app.setNum(4800); app.newSystem(app.actualConf);return false;&quot; value=&quot;4800&quot;/&gt;<br /> &lt;/div&gt;<br /> &lt;/td&gt;<br /> &lt;/tr&gt;&lt;tr&gt;<br /> &lt;td&gt;&lt;/td&gt;<br /> &lt;td align=&quot;center&quot;&gt;x&lt;/td&gt;<br /> &lt;/tr &gt;&lt;tr&gt;<br /> &lt;td style=&quot;padding:30px 0 0 0;&quot;&gt;v&lt;/td&gt;<br /> &lt;td style=&quot;padding:30px 0 0 0;&quot;&gt;&lt;canvas id=&quot;canvasChainV&quot; width=&quot;800&quot; height=&quot;100&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;&lt;/td&gt;<br /> &lt;/tr&gt;&lt;tr&gt;<br /> &lt;td&gt;&lt;/td&gt;<br /> &lt;td align=&quot;center&quot;&gt;x&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;/table&gt;<br /> <br /> &lt;script type=&quot;text/javascript&quot;&gt;var app = new MainChain(document.getElementById('canvasChain'), document.getElementById('canvasChainV'));&lt;/script&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> [[:ru:JavaScript - Цепь|Here]] you can find the previous versions of the program. <br /> <br /> == The proposed development directions ==<br /> *Add the ability to set a directed impulse. <br /> *Add control of simulation speed (for example, the slider). <br /> *Analyse a variety of interaction forces (linear, square, cubic, their variations). <br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> [[Category: Programming]]<br /> [[Category: &quot;Thermo Crystal&quot; Project]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Dynamics_of_a_particle_in_a_central_field&diff=8966 Dynamics of a particle in a central field 2017-01-18T15:41:35Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Движение материальной точки в центральном поле]]<br /> [[Virtual laboratory]] &gt; [[Dynamics of a particle in a central field]] &lt;HR&gt;<br /> Developer: [[A.M. Krivtsov]]&lt;HR&gt;<br /> <br /> Interactive application, shown below, allows us to study trajectories of a particle in the central power-law potential field. Interaction force &lt;math&gt;F&lt;/math&gt; is a power function of distance &lt;math&gt;r&lt;/math&gt;:<br /> <br /> :&lt;math&gt;F \sim r^n,&lt;/math&gt;<br /> <br /> where &lt;math&gt;n&lt;/math&gt; is some real dimensionless exponent. The attraction center is at &lt;math&gt;0&lt;/math&gt; point. <br /> <br /> &lt;htmlet nocache=&quot;yes&quot;&gt;Krivtsov/FC_TM&lt;/htmlet&gt;<br /> <br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The text of the program is written in JavaScript:''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> File'''&quot;FC.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> //The movement of a material point in the central field<br /> //developer A.M. Krivtsov <br /> //18-21.05.2014 <br /> //Internet: tm.spbstu.ru/FC<br /> <br /> function MainFC(canvas) {<br /> <br /> // main parameters<br /> <br /> const m = 1.; // weight<br /> const a = 1.; // radius<br /> const P = 1.; // gravitation force<br /> <br /> // Derivative dimensional parameters<br /> <br /> const T = 2 * Math.PI * Math.sqrt(m * a / P); // period of the movement on a circular orbit<br /> const v1 = Math.sqrt(P * a / m); // speed of the movement on a circular orbit (the 1st space)<br /> <br /> // Variables<br /> <br /> var n, v0, zoom, t_max, dt;<br /> <br /> // setting of sliders <br /> <br /> Slider_01.min = 1; Slider_01.max = 22; Slider_01.step = 0.1; // v0 / v1 - initial velocity<br /> Slider_02.max = 6; Slider_02.min = -Slider_02.max; Slider_02.step = 0.01; // n - degree indicator <br /> Slider_03.min = 0; Slider_03.max = 6; Slider_03.step = 0.01; // zoom <br /> Slider_04.min = 0; Slider_04.max = 100; Slider_04.step = 0.1; // t_max/T - time for calculation <br /> Slider_05.min = 1; Slider_05.max = set_exp(0); Slider_05.step = 1; // N_exp - experiment number<br /> <br /> Slider_05.focus();<br /> <br /> // values of variables<br /> <br /> dt = T / 200; // integration step<br /> set_exp(6); // variables are set for experiment 6<br /> <br /> // display<br /> <br /> draw();<br /> <br /> // the functions which are started at change of values of sliders and text fields<br /> <br /> this.set_01 = function(input) { v0 = Number(input) * v1; draw(); } <br /> this.set_02 = function(input) { n = Number(input); draw(); } <br /> this.set_03 = function(input) { zoom = Number(input); draw(); } <br /> this.set_04 = function(input) { t_max = Number(input) * T; draw(); } <br /> this.set_05 = function(input) { set_exp(input); draw(); } <br /> <br /> // display<br /> <br /> function draw() <br /> { <br /> // optimizing<br /> <br /> var n1 = (1 - n) / 2;<br /> var dt1 = -P / m * Math.pow(a, -n) * dt;<br /> <br /> // Area of creation of the schedule<br /> <br /> const X_max = canvas.width, Y_max = canvas.height;<br /> var x_max, y_max, sx, sy, X0, Y0;<br /> <br /> x_max = y_max = Math.pow(2, zoom) * a; // size of area of display<br /> x_min = y_min = -x_max; <br /> <br /> sx = sy = Y_max / (y_max - y_min); // scale on an axis y<br /> X0 = Y0 = Y_max + y_min * sy; // the provision 0 of an axis y in screen coordinates<br /> <br /> // Initialization of graphics<br /> <br /> var context = canvas.getContext(&quot;2d&quot;); // context - for drawing<br /> context.clearRect(0, 0, X_max, Y_max); // clear screen<br /> <br /> // horizontal axis<br /> context.strokeStyle = 'lightgrey';<br /> context.beginPath();<br /> context.moveTo(0, Y0); context.lineTo(X_max, Y0);<br /> context.moveTo(X0, 0); context.lineTo(X0, Y_max);<br /> context.moveTo(X0 + a * sx, Y0); context.arc(X0, Y0, a * sx, 0, 2 * Math.PI);<br /> context.stroke();<br /> <br /> // inscription<br /> context.fillStyle = 'black';<br /> context.font = &quot;italic 20px Times&quot;;<br /> context.fillText(&quot;0&quot;, X0 - 15, Y0 - 7);<br /> <br /> // schedule <br /> context.strokeStyle = 'black';<br /> context.beginPath();<br /> var vx = v0, vy = 0;<br /> var x = 0, y = a;<br /> context.moveTo(X0, Y0 - a * sy);<br /> for (var t = 0; t &lt; t_max; t += dt)<br /> {<br /> var r2 = x * x + y * y;<br /> var rn = Math.pow(r2, n1);<br /> vx += x / rn * dt1;<br /> vy += y / rn * dt1;<br /> x += vx * dt; <br /> y += vy * dt; <br /> var X = X0 + x * sx; <br /> var Y = Y0 - y * sy; <br /> context.lineTo(X, Y);<br /> }<br /> context.stroke(); <br /> }<br /> <br /> // Experiment choice<br /> <br /> function set_exp(N_exp)<br /> { <br /> var k = Number(N_exp);<br /> <br /> // degree indicator initial velocity zoom max number of steps<br /> <br /> if (!--k) { n = -3; v0 = 1.004 * v1; zoom = 2.98; t_max = 17.4 * T; } // spiral <br /> if (!--k) { n = -2.9; v0 = 1.023 * v1; zoom = 2.98; t_max = 67.6 * T; } <br /> if (!--k) { n = -2.87; v0 = 1.029 * v1; zoom = 2.57; t_max = 21.6 * T; } <br /> if (!--k) { n = -2.87; v0 = 1.03 * v1; zoom = 2.96; t_max = 94.4 * T; } <br /> if (!--k) { n = -2.5; v0 = 1.135 * v1; zoom = 2.98; t_max = 31.1 * T; } // 2<br /> <br /> if (!--k) { n = -2; v0 = 1.25 * v1; zoom = 2; t_max = 20 * T; } // ellipse<br /> if (!--k) { n = -1; v0 = 1.25 * v1; zoom = 1; t_max = 26 * T; }<br /> if (!--k) { n = -1; v0 = 1.36 * v1; zoom = 1.18; t_max = 10.8 * T; } // 10<br /> if (!--k) { n = -1; v0 = 1.63 * v1; zoom = 1.87; t_max = 25.3 * T; }<br /> if (!--k) { n = -1; v0 = 1.93 * v1; zoom = 2.8; t_max = 8 * T; } // 3 !<br /> if (!--k) { n = -1; v0 = 2.31 * v1; zoom = 3.92; t_max = 64.1 * T; } // 11<br /> if (!--k) { n = -1; v0 = 2.43 * v1; zoom = 4.29; t_max = 61.8 * T; } // 8<br /> if (!--k) { n = -1; v0 = 2.74 * v1; zoom = 5.5; t_max = 85.5 * T; } // 5<br /> <br /> if (!--k) { n = -0.74; v0 = 2.665 * v1; zoom = 3.81; t_max = 18.8 * T; } // 5 <br /> <br /> if (!--k) { n = 0; v0 = 1.66 * v1; zoom = 1.39; t_max = 5.1 * T; } // 7 <br /> if (!--k) { n = 0; v0 = 2.7 * v1; zoom = 2.34; t_max = 8.9 * T; } // 9 <br /> if (!--k) { n = 0; v0 = 3.46 * v1; zoom = 3.03; t_max = 13.3 * T; } // 11 <br /> <br /> if (!--k) { n = 1; v0 = 2 * v1; zoom = 1.3; t_max = 1 * T; } // 11 <br /> <br /> if (!--k) { n = 2; v0 = 2.39 * v1; zoom = 1.18; t_max = 4.0 * T; } // 11 <br /> <br /> if (!--k) { n = 3; v0 = 3.58 * v1; zoom = 1.28; t_max = 1.8 * T; } // 7 <br /> if (!--k) { n = 3; v0 = 6.97 * v1; zoom = 1.87; t_max = 1.7 * T; } // 9<br /> if (!--k) { n = 3; v0 = 11.28 * v1; zoom = 2.13; t_max = 1.6 * T; } // 11 <br /> if (!--k) { n = 3; v0 = 16.13 * v1; zoom = 2.50; t_max = 1.6 * T; } // 13 <br /> <br /> if (!--k) { n = 3.29; v0 = 1.3 * v1; zoom = 0.48; t_max = 1.8 * T; } // 13 <br /> <br /> if (!--k) { n = 4; v0 = 3.36 * v1; zoom = 1.12; t_max = 1.1 * T; } // 5 ! <br /> if (!--k) { n = 4; v0 = 6.08 * v1; zoom = 1.44; t_max = 1.9 * T; } // 12 <br /> if (!--k) { n = 4; v0 = 9.52 * v1; zoom = 1.66; t_max = 0.9 * T; } // 7 ! <br /> if (!--k) { n = 4; v0 = 18.45 * v1; zoom = 2.18; t_max = 0.728 * T; } // 9 <br /> <br /> if (!--k) { n = 5; v0 = 7.15 * v1; zoom = 1.55; t_max = 0.6 * T; } // 5 ! <br /> <br /> if (!--k) { n = 4; v0 = 3.304 * v1; zoom = 1.12; t_max = 36.4 * T; } // 5 ~~~<br /> if (!--k) { n = 4; v0 = 9.394 * v1; zoom = 1.66; t_max = 19.6 * T; } // 7 ~~~ <br /> <br /> if (N_exp)<br /> {<br /> Text_01.value = v0 / v1; Slider_01.value = Text_01.value; // initial velocity <br /> Text_02.value = n; Slider_02.value = Text_02.value; // degree indicator<br /> Text_03.value = zoom; Slider_03.value = Text_03.value; // zoom<br /> Text_04.value = t_max / T; Slider_04.value = Text_04.value; // time for calculation <br /> Text_05.value = N_exp; Slider_05.value = Text_05.value; // number of experiment<br /> }<br /> <br /> return -k; // Если N_exp = 0 returns total of experiments, in other cases returns 0<br /> }<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> File '''&quot;FC.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;canvas id=&quot;canvasGraph&quot; width=&quot;600&quot; height=&quot;600&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;<br /> <br /> &lt;!--Installation of parameters of interaction (text fields and sliders)--&gt;<br /> &lt;div&gt;<br /> &lt;font face= &quot;Times New Roman&quot;&gt;&lt;I&gt;<br /> v&lt;/I&gt;&lt;SUB&gt;0&lt;/SUB&gt; = &lt;input id=&quot;Text_01&quot; style=&quot;width: 4.2ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> // if not the number is entered - the line won't pass validation on a pattern above, and checkValidity () will return false<br /> if (!this.checkValidity()) return;<br /> app.set_01(this.value);<br /> document.getElementById('Slider_01').value = this.value;<br /> &quot;&gt;&lt;I&gt; v&lt;/I&gt;&lt;SUB&gt;1&lt;/SUB&gt; <br /> &lt;input type=&quot;range&quot; id=&quot;Slider_01&quot; style=&quot;width: 100px;&quot; oninput=&quot;app.set_01(this.value); document.getElementById('Text_01').value = this.value;&quot;&gt;<br /> n = &lt;input id=&quot;Text_02&quot; style=&quot;width: 4.2ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> if (!this.checkValidity()) return;<br /> app.set_02(this.value);<br /> document.getElementById('Slider_02').value = this.value;<br /> &quot;&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;Slider_02&quot; style=&quot;width: 100px;&quot; oninput=&quot;app.set_02(this.value); document.getElementById('Text_02').value = this.value;&quot;&gt;<br /> &lt;/font&gt;<br /> &lt;/div&gt;<br /> &lt;div&gt;<br /> &lt;font face= &quot;Times New Roman&quot;&gt;<br /> zoom = &lt;input id=&quot;Text_03&quot; style=&quot;width: 4.2ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> // if not the number is entered - the line won't pass validation on a pattern above, and checkValidity () will return false<br /> if (!this.checkValidity()) return;<br /> app.set_03(this.value);<br /> document.getElementById('Slider_03').value = this.value;<br /> &quot;&gt; <br /> &lt;input type=&quot;range&quot; id=&quot;Slider_03&quot; style=&quot;width: 100px;&quot; oninput=&quot;app.set_03(this.value); document.getElementById('Text_03').value = this.value;&quot;&gt;<br /> &lt;I&gt;t&lt;/I&gt;&lt;SUB&gt;max&lt;/SUB&gt; = &lt;input id=&quot;Text_04&quot; style=&quot;width: 4.2ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> if (!this.checkValidity()) return;<br /> app.set_04(this.value);<br /> document.getElementById('Slider_04').value = this.value;<br /> &quot;&gt;&lt;I&gt; T&lt;/I&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;Slider_04&quot; style=&quot;width: 100px;&quot; oninput=&quot;app.set_04(this.value); document.getElementById('Text_04').value = this.value;&quot;&gt;<br /> &lt;/font&gt;<br /> &lt;/div&gt;<br /> &lt;div&gt;<br /> &lt;font face= &quot;Times New Roman&quot;&gt;<br /> Number of experiment &lt;input id=&quot;Text_05&quot; style=&quot;width: 4.2ex;&quot; required pattern=&quot;[-+]?([0-9]*\.[0-9]+|[0-9]+)&quot; oninput=&quot;<br /> // if not the number is entered - the line won't pass validation on a pattern above, and checkValidity () will return false<br /> if (!this.checkValidity()) return;<br /> app.set_05(this.value);<br /> document.getElementById('Slider_05').value = this.value;<br /> &quot;&gt; <br /> &lt;input type=&quot;range&quot; id=&quot;Slider_05&quot; style=&quot;width: 100px;&quot; oninput=&quot;app.set_05(this.value); document.getElementById('Text_05').value = this.value;&quot;&gt;<br /> &lt;/div&gt;<br /> <br /> &lt;script type=&quot;text/javascript&quot;&gt;var app = new MainFC (<br /> document.getElementById('canvasGraph')<br /> );&lt;/script&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> The application allows to set the following parameters interactively: <br /> * &lt;math&gt;v_0&lt;/math&gt; is the initial velocity of the point. The initial velocity is directed perpendicular to the radial vector. Velocity is measured relatively to the circular speed &lt;math&gt;v_1&lt;/math&gt; at the initial distance from the center (the first cosmic speed). <br /> * &lt;math&gt;n&lt;/math&gt; is the index of the interaction law (&lt;math&gt;n=-2&lt;/math&gt; corresponds to the gravitational interaction, &lt;math&gt;n=1&lt;/math&gt; is the elastic interaction). <br /> * &quot;zoom&quot; is the logarithmic scale (the logarithm to base 2). <br /> * &lt;math&gt;t_{\rm max}&lt;/math&gt; is the integration time expressed in terms of periods of circular motion &lt;math&gt;T&lt;/math&gt; at the initial distance from the center. <br /> <br /> Besides all, it is possible to set &quot;a number of the experiment&quot;. Every number has a separate set of four parameters named above and characterized by a specific type of motion.&lt;!-- Experiments are ordered by &lt;math&gt;n&lt;/math&gt;(first), then by &lt;math&gt;v_0&lt;/math&gt;.--&gt;<br /> <br /> == Research ideas ==<br /> <br /> * To find all the possible trajectories <br /> * To define the dependence of the distance to the epicenter (the most distant point) of the orbit on &lt;math&gt;n&lt;/math&gt; and &lt;math&gt;u=v_0/v_1&lt;/math&gt;.<br /> * To find the closed trajectories of different topologies (for example, 5th, the 7th pointed stars, etc.) and to determine their position on the plane of parameters &lt;math&gt;n&lt;/math&gt; and &lt;math&gt;u&lt;/math&gt;.<br /> * To find a method for integrating the equations of motion with a variable step allowing to model the motion of a point at a large values of &lt;math&gt;|n|&lt;/math&gt; effectively.<br /> * Fit the parameters values (and develop a handy method to do so), to obtain &quot;beautiful&quot; curves, which can be considered as Science Art objects (see in particular, the last numbers of experiments). <br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> [[Category: Programming]]<br /> [[Category: JavaScript]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Solar_System_model&diff=8965 Solar System model 2017-01-18T15:39:44Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Моделирование Солнечной системы]]<br /> [[Virtual laboratory]] &gt; [[Solar System model]] &lt;HR&gt;<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Solar_System/Solar_System_v2_release.html |width=830 |height=830 |border=0 }}<br /> <br /> '''''This model demonstrates the real ratio of the orbital periods of the planets.'''''<br /> <br /> '''''The radii of the orbits, as well as the sizes of the planets and the Sun are shown in the logarithmic scale.'''''<br /> <br /> Download: [[Media:Solar_System_v2_release.zip|Solar_System_v2_release.zip]] (the program + pictures of the planets). <br /> <br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The text of the program is written in JavaScript (developed by [[Tsvetkov Denis]]):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> File '''&quot;Solar_System_v2_release.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> function Main_Solar(canvas) {<br /> <br /> canvas.onselectstart = function () {return false;}; // cancell canvas allocation <br /> <br /> // Preliminary installations<br /> <br /> var context = canvas.getContext(&quot;2d&quot;); // context for drawing<br /> <br /> var m0 = 1; // weight (mass of Earth)<br /> var t0 = 1; // time (1 turn of Earth round its pivot-center (1 day))<br /> var a0 = 1; // distance (astronomical unit - distance from the Sun to Earth)<br /> <br /> var r0 = 4.2588e-5 * a0; // Earth radius<br /> var t1 = 365.2564 * t0; // 1 turn of Earth around the Sun (1 year)<br /> <br /> // *** calculation parameters ***<br /> <br /> var fps = 60; // frames per second<br /> var dt = 0.5 * t0; // integration step<br /> // *** Implementation of the program ***<br /> <br /> var space_objects = [];<br /> // distance and time_around_Sun values at the sun are made in order that it flickered because of the movement<br /> space_objects.push({name:&quot;Sun&quot;, mass:333000*m0, distance:0.001*a0, radius:109.21*r0, time_around_Sun:60*t0, phase:0, color:&quot;#f6e209&quot;, file:&quot;VL_SS_Sun.png&quot;});<br /> space_objects.push({name:&quot;Mercury&quot;, mass:0.05527*m0, distance:0.387*a0, radius:0.3829*r0, time_around_Sun:87.97*t0, phase:0, color:&quot;#de442c&quot;, file:&quot;VL_SS_Mercury.png&quot;});<br /> space_objects.push({name:&quot;Venus&quot;, mass:0.815*m0, distance:0.723*a0, radius:0.949*r0, time_around_Sun:224.7*t0, phase:0, color:&quot;#e8b633&quot;, file:&quot;VL_SS_Venus.png&quot;});<br /> space_objects.push({name:&quot;Earth&quot;, mass:1*m0, distance:1*a0, radius:1*r0, time_around_Sun:1*t1, phase:0, color:&quot;#3e6286&quot;, file:&quot;VL_SS_Earth.png&quot;});<br /> space_objects.push({name:&quot;Mars&quot;, mass:0.107*m0, distance:1.523*a0, radius:0.532*r0, time_around_Sun:1.88*t1, phase:0, color:&quot;#752814&quot;, file:&quot;VL_SS_Mars.png&quot;});<br /> space_objects.push({name:&quot;Jupiter&quot;, mass:317.8*m0, distance:5.2*a0, radius:10.97*r0, time_around_Sun:11.86*t1, phase:0, color:&quot;#8c694d&quot;, file:&quot;VL_SS_Jupiter.png&quot;});<br /> space_objects.push({name:&quot;Saturn&quot;, mass:95.2*m0, distance:9.54*a0, radius:9.45*r0, time_around_Sun:29.46*t1, phase:0, color:&quot;#c69e47&quot;, file:&quot;VL_SS_Saturn.png&quot;});<br /> space_objects.push({name:&quot;Uranus&quot;, mass:14.53*m0, distance:19.19*a0, radius:4*r0, time_around_Sun:84.02*t1, phase:0, color:&quot;#4e659b&quot;, file:&quot;VL_SS_Uranus.png&quot;});<br /> space_objects.push({name:&quot;Neptune&quot;, mass:17.14*m0, distance:30.06*a0, radius:3.88*r0, time_around_Sun:164.78*t1, phase:0, color:&quot;#4e6fbc&quot;, file:&quot;VL_SS_Neptunes.png&quot;});<br /> // space_objects.push({name:&quot;Pluto&quot;, mass:0.0022*m0, distance:39.53*a0, radius:0.18*r0, time_around_Sun:248.09*t1, phase:0});<br /> // space_objects.push({name:&quot;Haumea&quot;, mass:777*m0, distance:777*a0, radius:777*r0, time_around_Sun:285*t1, phase:0});<br /> // space_objects.push({name:&quot;Makemake&quot;, mass:777*m0, distance:777*a0, radius:777*r0, time_around_Sun:309.88*t1, phase:0});<br /> // space_objects.push({name:&quot;Erida&quot;, mass:777*m0, distance:777*a0, radius:777*r0, time_around_Sun:557*t1, phase:0});<br /> // space_objects.push({name:&quot;Sedna&quot;, mass:777*m0, distance:777*a0, radius:777*r0, time_around_Sun:12059*t1, phase:0});<br /> <br /> for (var i = 0; i &lt; space_objects.length; i++) {<br /> space_objects[i].phase = Math.random() * 360;<br /> }<br /> <br /> var scale = canvas.height / a0 / space_objects.length / 2.1; // large-scale coefficient for transition from settlement to screen coordinates<br /> var w = canvas.width / scale; // window width in settlement coordinates<br /> var h = canvas.height / scale; // window height in settlement coordinates<br /> // Generation of stars<br /> var stars = [];<br /> function generate_stars() {<br /> for (var i = 0; i &lt; 1000; i++) {<br /> //set color<br /> var r = (0x1a0 + (Math.random()) * 0x5f).toString(16).substr(1,2); <br /> var g = (0x1a0 + (Math.random()) * 0x5f).toString(16).substr(1,2);<br /> var b = (0x1a0 + (Math.random()) * 0x5f).toString(16).substr(1,2);<br /> stars[i] = {x:Math.random() * w * scale, y:Math.random() * h * scale, color:'#' + r + g + b};<br /> }<br /> }<br /> <br /> // Main cycle of the program<br /> function control() {<br /> physics();<br /> draw();<br /> }<br /> <br /> // calculation part of the program<br /> function physics() { <br /> for (var i = 0; i &lt; space_objects.length; i++) {<br /> space_objects[i].phase += 360 * dt / space_objects[i].time_around_Sun;<br /> }<br /> }<br /> <br /> // loading of images of planets<br /> function load_pics() {<br /> for (var i = 0; i &lt; space_objects.length; i++) {<br /> if (!space_objects[i].file) continue;<br /> var pic = new Image();<br /> pic.src = &quot;Pics/&quot; + space_objects[i].file;<br /> space_objects[i].pic = pic;<br /> }<br /> }<br /> <br /> // drawing<br /> function draw() {<br /> // dark sky<br /> context.fillStyle = &quot;#000000&quot;;<br /> context.fillRect(0, 0, w * scale, h * scale);<br /> <br /> // stars<br /> for (var i0 = 0; i0 &lt; stars.length; i0++) {<br /> context.fillStyle = stars[i0].color;<br /> context.fillRect(stars[i0].x, stars[i0].y, 1, 1);<br /> }<br /> <br /> for (var i = 0; i &lt; space_objects.length; i++){<br /> var p = space_objects[i];<br /> var ro = 1.9 * Math.log(1 + 2.5 * p.distance / a0) * a0;<br /> var fi = p.phase / 180 * Math.PI;<br /> var xS = (w / 2 + ro * Math.cos(fi)) * scale;<br /> var yS = (h / 2 + ro * Math.sin(fi)) * scale;<br /> <br /> // trajectories<br /> context.beginPath();<br /> context.arc(w / 2 * scale, h / 2 * scale, ro * scale, 0, 2 * Math.PI, false);<br /> context.strokeStyle = &quot;#516185&quot;;<br /> context.stroke();<br /> <br /> // space objects<br /> if (p.pic) {<br /> var r = 0.1 * Math.log(1 + 8 * p.radius / r0) * a0 * scale;<br /> var wh = p.pic.width / p.pic.height;<br /> context.drawImage(p.pic, xS - r * wh, yS - r, r * 2 * wh, r * 2);<br /> }<br /> }<br /> }<br /> <br /> // Start of the system<br /> load_pics();<br /> generate_stars();<br /> setInterval(control, 1000 / fps);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> Файл '''&quot;Solar_System_v2_release.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;meta charset=&quot;UTF-8&quot; /&gt;<br /> &lt;title&gt;Solar System&lt;/title&gt;<br /> &lt;script src=&quot;Solar_System_v2_release.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;canvas id=&quot;Solar_System&quot; width=&quot;800&quot; height=&quot;800&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;<br /> &lt;script type=&quot;text/javascript&quot;&gt;var app = new Main_Solar(document.getElementById('Solar_System'));&lt;/script&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> == The proposed development directions ==<br /> *Add satellites, dwarf planets and other space objects. <br /> *Show information about the space objects when aiming cursor on it. <br /> *Add the planets rotation around their axes. <br /> *Add an ability to rotate the camera for a better view.<br /> *Set real phases for the planets. <br /> *Add an ability to view the status of the planets at a certain point (e.g., a time slider)<br /> <br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> --&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Conway%27s_Game_of_Life&diff=8964 Conway's Game of Life 2017-01-18T15:38:19Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Игра &quot;Жизнь&quot;]]<br /> [[Virtual laboratory]] &gt; [[Conway's Game of Life]] &lt;HR&gt;<br /> <br /> Here is the program, presenting [https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life the game of Life] by [https://en.wikipedia.org/wiki/John_Horton_Conway John Conway]. You can draw the cells on the field with a mouse. <br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/CelAut/CelAut_v2_release/CelAut_v2_release.html |width=630 |height=650 |border=0 }}<br /> <br /> Download the program code: [[Media:CelAut_v2_release.zip|CelAut_v2_release.zip]]<br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The Text of the program is written in JavaScript (developed by [[Tsvetkov Denis]]):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> File '''&quot;CelAut_v2_release.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> function MainChain(canvas) {<br /> <br /> // Preliminary installations<br /> var context = canvas.getContext(&quot;2d&quot;); // context for drawing<br /> document.oncontextmenu=function(e){return false}; // blocking of a context menu<br /> <br /> // *** calculation parameteres ***<br /> <br /> var fps = 5; // frames per second<br /> <br /> // running of the profgam<br /> <br /> var w = canvas.width; // window width<br /> var h = canvas.height; // window hight<br /> var n = 50; // quantity of cages on horizontal axis<br /> var m = 50; // quantity of cages across on vertical axis<br /> var cellW = w/n; // cage width<br /> var cellH = h/m; // cage hight<br /> <br /> var pause = true;<br /> var intervalID; // for management of operation of the automatic machine<br /> <br /> // Conway's life: [B = 000100000, L = 001100000]<br /> var B = &quot;000100000&quot;; // birth code<br /> var L = &quot;001100000&quot;; // survival code<br /> <br /> // Mouse parameters<br /> <br /> var mouseX; var mouseY; // cursor coordinates of a mouse<br /> <br /> canvas.onmousedown = function(e){ // function when pressing a key of a mouse<br /> var life;<br /> if (e.which == 1) life = true; // the cage is born by pressing the left key of a mouse <br /> else if (e.which == 3) life = false; // the cage is dead by pressing the left key of a mouse <br /> else return;<br /> <br /> setCell(e, life);<br /> canvas.onmousemove = function(e) {setCell(e, life);}; // shift cursor<br /> };<br /> <br /> document.onmouseup = function(e){ <br /> canvas.onmousemove = null; <br /> };<br /> <br /> function refreshMouseCoords(e){ // procedure updates coordinates in the mouseX and mouseY variables<br /> var rect = canvas.getBoundingClientRect();<br /> mouseX = e.clientX - rect.left;<br /> mouseY = e.clientY - rect.top;<br /> }<br /> <br /> // working with massive<br /> <br /> var cells; // massive of cages<br /> var cellsBuf = []; // the buffer for calculation of the following step<br /> for (var i = 0; i &lt; n; i++) cellsBuf[i] = [];<br /> function generateRandomField(n, m) { // each cage is filled with casual value is live/is dead<br /> cells = [];<br /> for (var i = 0; i &lt; n; i++) {<br /> cells[i] = [];<br /> for (var j = 0; j &lt; m; j++) {<br /> cells[i][j] = (Math.random() &gt;= 0.5);<br /> }<br /> }<br /> }<br /> <br /> function setCell(e, life){ // to give to a cage a certain state from pressing of a key of a mouse<br /> refreshMouseCoords(e); // update coordinates in the mouseX and mouseY variables<br /> if (mouseX &lt; 0 || mouseX &gt;= w || mouseY &lt; 0 || mouseY &gt;= h) return; // check for wrong coordinates<br /> var i = Math.floor(mouseX/cellW); // cage on horizontal axis<br /> var j = Math.floor(mouseY/cellH); // cage on vertical axis<br /> if (cells[i][j] != life) {<br /> cells[i][j] = life;<br /> draw();<br /> }<br /> }<br /> <br /> MainChain.prototype.clear = function(){<br /> for (var i = 0; i &lt; n; i++)<br /> for (var j = 0; j &lt; m; j++)<br /> cells[i][j] = false;<br /> draw();<br /> stopSystem();<br /> };<br /> <br /> // for management of operation of the automatic machine<br /> <br /> function step() {<br /> tick();<br /> draw();<br /> }<br /> <br /> MainChain.prototype.changePauseState = function() { // pause<br /> if (!pause) stopSystem();<br /> else startSystem()<br /> };<br /> <br /> MainChain.prototype.nextStep = function(){ // next step<br /> stopSystem();<br /> step();<br /> };<br /> <br /> function startSystem() {<br /> pause = false;<br /> intervalID = setInterval(step, 1000/fps);<br /> document.getElementById('pause').value = &quot;Stop&quot;;<br /> }<br /> <br /> function stopSystem() {<br /> pause = true;<br /> clearInterval(intervalID);<br /> document.getElementById('pause').value = &quot;Next step&quot;;<br /> }<br /> <br /> // calculation part of the programm<br /> <br /> // the functions providing frequency of system<br /> function next(i, n) {if (i == (n-1)) return 0; else return i+1;}<br /> function prev(i, n) {if (i == 0) return n-1; else return i-1;}<br /> <br /> function tick(){ <br /> // copyingа cells to cellsBuf<br /> for (var i0 = 0; i0 &lt; n; i0++)<br /> for (var j0 = 0; j0 &lt; m; j0++)<br /> cellsBuf[i0][j0] = cells[i0][j0];<br /> <br /> for (var i = 0; i &lt; n; i++) {<br /> for (var j = 0; j &lt; m; j++) {<br /> <br /> // calculation of amount of living cells around the considered cage<br /> var near = 0;<br /> if (cellsBuf[prev(i, n)] [prev(j, m)]) near++;<br /> if (cellsBuf[prev(i, n)] [j]) near++;<br /> if (cellsBuf[prev(i, n)] [next(j, m)]) near++;<br /> if (cellsBuf[i] [prev(j, m)]) near++;<br /> if (cellsBuf[i] [next(j, m)]) near++;<br /> if (cellsBuf[next(i, n)] [prev(j, m)]) near++;<br /> if (cellsBuf[next(i, n)] [j]) near++;<br /> if (cellsBuf[next(i, n)] [next(j, m)]) near++;<br /> <br /> if (cellsBuf[i][j]) // cell is alive<br /> cells[i][j] = (L[near] == '1'); // check of a condition of a survival on a binomial of L<br /> else // cell is dead<br /> cells[i][j] = (B[near] == '1'); // check of a condition of the birth on B binomial<br /> <br /> }<br /> }<br /> }<br /> <br /> // drawing<br /> <br /> function draw(){<br /> context.clearRect(0, 0, w, h); // clear the screen<br /> for (var i = 0; i &lt; n; i++){<br /> for (var j = 0; j &lt; m; j++){<br /> if (cells[i][j]){<br /> context.beginPath();<br /> context.rect(i*cellW, j*cellH, cellW, cellH);<br /> context.closePath();<br /> context.fill();<br /> }<br /> }<br /> }<br /> }<br /> <br /> // Run system<br /> generateRandomField(n, m); // generate field<br /> startSystem();<br /> <br /> }<br /> &lt;/syntaxhighlight&gt;<br /> Файл '''&quot;CelAut_v2_release.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;title&gt;Cellular automaton&lt;/title&gt;<br /> &lt;script src=&quot;CelAut_v2_release.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;canvas id=&quot;canvasCelAut&quot; width=&quot;600&quot; height=&quot;600&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;&lt;br&gt;<br /> &lt;input id=&quot;pause&quot; type=&quot;button&quot; name=&quot;&quot; style=&quot;width: 100px&quot; onclick=&quot;app.changePauseState();return false;&quot;/&gt;<br /> &lt;input type=&quot;button&quot; name=&quot;&quot; onclick=&quot;app.nextStep();return false;&quot; value=&quot;Next step&quot;/&gt;<br /> &lt;input type=&quot;button&quot; name=&quot;&quot; onclick=&quot;app.clear();return false;&quot; value=&quot;Clear the field&quot;/&gt;<br /> &lt;script type=&quot;text/javascript&quot;&gt;var app = new MainChain(document.getElementById('canvasCelAut'));&lt;/script&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> [[:ru:JavaScript - Клеточный автомат|Here]] you can find the previous versions of the program.<br /> <br /> &lt;!--[[Category: Virtual Laboratory]]<br /> [[Category: Programming]]<br /> --&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Driven_oscillations_of_a_mass_on_a_nonlinear_spring&diff=8963 Driven oscillations of a mass on a nonlinear spring 2017-01-18T15:35:23Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Нелинейные колебания груза с вынуждающей силой]]<br /> [[File:Nolinekoleban2.png|thumb|Driven oscillations of a mass on a nonlinear spring|500px]]<br /> <br /> == Annotation to the project ==<br /> This project gives an idea about nonlinear oscillation of a mass with the periodic force acting on it.<br /> <br /> == Formulation of the problem ==<br /> Let’s put that a mass on nonlinear spring has mass m and experiencing the action of an external force F, which has a law F = sin (t).<br /> <br /> * Task: formulate the problem on JavaScript which modulate motion of a mass with different parameters of the system.&lt;br&gt;<br /> <br /> == Overview ==<br /> If the periodically changing of the external force is acting on the system, the system performs oscillations which repeat the pattern of changes of this force. Such oscillations are '''called forced'''.<br /> <br /> F0 is the force amplitude and the greatest value of the force.<br /> <br /> {|<br /> |-<br /> | Because of the work of an external force, the maximum value of the potential energy of the spring and the kinetic energy of a mass increase. This will increase the loss on overcome the resistance forces. In the end the work of the external force will exactly offset the energy losses in the system. Further growth of the oscillations in the system will stop and oscillations will be established with a constant amplitude. || [[File:123.png|thumb|A typical plot of the amplitude function]]<br /> |}<br /> <br /> Equation of motion: <br /> &lt;math&gt;m\ddot x = -kx -{k_1}x^3 + {F_0}sin(t) - B \dot x&lt;/math&gt;<br /> <br /> == Visualization on JavaScript ==<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Kiselev/Spring/Springs.html |width=800 |height=800 |border=0 }}<br /> <br /> Download program: [[Media:SpringNoLine.rar|SpringNoLine.rar]]<br /> <br /> &lt;!--'''Text of the program on JavaScript (creator Pavel Kiselev):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> File '''&quot;Spring.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; enclose=&quot;div&quot;&gt;--&gt;<br /> <br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The Text of the program is written in JavaScript (developed by Pavel Kiselev):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt; <br /> <br /> window.addEventListener(&quot;load&quot;, Main_Spring, true);<br /> function Main_Spring() {<br /> var canvas = spring_canvas;<br /> canvas.onselectstart = function () {return false;}; // prohibition of selection canvas<br /> var ctx = canvas.getContext(&quot;2d&quot;); // drawing at the ctx<br /> var w = canvas.width; // the width of the window in the calculated coordinates<br /> var h = canvas.height; // the height of the window in the calculated coordinates<br /> var Pi = 3.1415926; // Pi<br /> var m0 = 1; // weight scale<br /> var T0 = 1; // time scale (the period of oscillation of the original system)<br /> var t = 0;<br /> var k0 = 2 * Pi / T0; // frequency scale<br /> var C0 = m0 * k0 * k0; // hardness scale<br /> var B0 = 2 * m0 * k0; // viscosity scale<br /> var omega = 10;<br /> <br /> // *** Creating the physical parameters ***<br /> var F = 80;<br /> var m = 1 * m0; // weight<br /> var C = 1 * C0; // rigidity<br /> var C1 = 1 * C0; // rigidity1<br /> var B = .1 * B0; // viscosity<br /> <br /> slider_m.value = (m / m0).toFixed(1); number_m.value = (m / m0).toFixed(1);<br /> slider_C.value = (C / C0).toFixed(1); number_C.value = (C / C0).toFixed(1);<br /> slider_C1.value = (C / C0).toFixed(1); number_C1.value = (C / C0).toFixed(1);<br /> slider_B.value = (B / B0).toFixed(1); number_B.value = (B / B0).toFixed(1);<br /> slider_F.value = (F / 40).toFixed(1); number_F.value = (F / 40).toFixed(1);<br /> <br /> // *** Creating the computing parameters ***<br /> <br /> var fps = 300; // frames per second <br /> var spf = 100; // steps per frame <br /> var dt = 0.05 * T0 / fps; // integration step (calculation quality) <br /> var steps = 0; // the number of integration steps<br /> <br /> function setM(new_m) {m = new_m * m0;}<br /> function setC(new_C) {C = new_C * C0;}<br /> function setC1(new_C1) {C1 = new_C1 * C0 * 0.067;}<br /> function setB(new_B) {B = new_B * B0;}<br /> function setF(new_F) {F = new_F * 40;}<br /> <br /> slider_m.oninput = function() {number_m.value = slider_m.value; setM(slider_m.value);};<br /> number_m.oninput = function() {slider_m.value = number_m.value; setM(number_m.value);};<br /> slider_C.oninput = function() {number_C.value = slider_C.value; setC(slider_C.value);};<br /> number_C.oninput = function() {slider_C.value = number_C.value; setC(number_C.value);};<br /> slider_C1.oninput = function() {number_C1.value = slider_C1.value; setC1(slider_C1.value);};<br /> number_C1.oninput = function() {slider_C1.value = number_C1.value; setC1(number_C1.value);};<br /> slider_B.oninput = function() {number_B.value = slider_B.value; setB(slider_B.value);};<br /> number_B.oninput = function() {slider_B.value = number_B.value; setB(number_B.value);};<br /> slider_F.oninput = function() {number_F.value = slider_F.value; setF(slider_F.value);};<br /> number_F.oninput = function() {slider_F.value = number_F.value; setF(number_F.value);};<br /> <br /> var count = true; // system analysis<br /> var v = 0; // speed of a mass<br /> <br /> var rw = canvas.width / 30; <br /> var rh = canvas.height / 1.5;<br /> var x0 = 15 * rw - rw / 2; <br /> var y0 = rh / 1.33 - rh / 2;<br /> <br /> // spring settings<br /> var coil = 10; // number of turns<br /> var startX = 0; // spring fastening<br /> <br /> // create a rectangle (mass)<br /> var rect = {<br /> x: x0, width: rw,<br /> y: y0, height: rh,<br /> fill: &quot;rgba(0, 0, 255, 1)&quot; // colour<br /> };<br /> <br /> // capture a rectangle with the mouse<br /> var mx_; // buffer position of the mouse (to calculate the speed of the ball when released)<br /> document.onmousedown = function(e) { // function by pressing the mouse button<br /> var m = mouseCoords(e); // we get estimated coordinates of the mouse cursor<br /> <br /> var x = rect.x;<br /> var xw = rect.x + rect.width;<br /> var y = rect.y;<br /> var yh = rect.y + rect.height;<br /> if (x &lt;= m.x &amp;&amp; xw &gt;= m.x &amp;&amp; y &lt;= m.y &amp;&amp; yh &gt;= m.y) {<br /> if (e.which == 1) { // left mouse button is pressed<br /> rect.xPlus = rect.x - m.x; // cursor shift relative to the cargo on the x<br /> rect.yPlus = rect.y - m.y; // cursor shift relative to the cargo on the y<br /> mx_ = m.x;<br /> count = false;<br /> document.onmousemove = mouseMove; // while a key is pressed, fanction of motions is correct<br /> }<br /> }<br /> };<br /> <br /> document.onmouseup = function(e) { // function when you release the mouse button<br /> document.onmousemove = null; // when the key is released, no movement function<br /> count = true;<br /> };<br /> <br /> function mouseMove(e) { // function when you move the mouse, it works only while holding LKM<br /> var m = mouseCoords(e); // we get estimated coordinates of the mouse cursor<br /> rect.x = m.x + rect.xPlus;<br /> // v = 6.0 * (m.x - mx_) / dt / fps; // inertia preservation<br /> v = 0;<br /> mx_ = m.x;<br /> }<br /> <br /> function mouseCoords(e) { // function returns the calculated coordinates of the mouse cursor<br /> var m = [];<br /> var rect = canvas.getBoundingClientRect();<br /> m.x = (e.clientX - rect.left);<br /> m.y = (e.clientY - rect.top);<br /> return m;<br /> }<br /> <br /> // plot<br /> var vGraph = new TM_graph( // determine the plot<br /> &quot;#vGraph&quot;, // on html-element #vGraph<br /> 250, // the number of steps by &quot;x&quot; axis<br /> -1, 1, 0.2); // min value of Y-axis, max value of Y-axis, Y-axis step<br /> <br /> function control() {<br /> calculate();<br /> draw();<br /> requestAnimationFrame(control);<br /> }<br /> control()<br /> // setInterval(control, 1000 / fps); // start of the system<br /> <br /> function calculate() {<br /> if (!count) return;<br /> for (var s=1; s&lt;=spf; s++) {<br /> var f = -B*v - C * (rect.x - x0) - C1*Math.pow(rect.x - x0,3)+2*F*Math.sin(t);<br /> v += f / m * dt;<br /> //console.log(f);<br /> rect.x += v * dt;<br /> t+= dt;<br /> steps++;<br /> if (steps % 80 == 0) vGraph.graphIter(steps, (rect.x-x0)/canvas.width*2); // infeed graph data<br /> }<br /> <br /> }<br /> <br /> function draw() {<br /> ctx.clearRect(0, 0, w, h);<br /> draw_spring(startX, rect.x, h/2, 10, 50);<br /> ctx.fillStyle = &quot;#0000ff&quot;;<br /> ctx.fillRect(rect.x, rect.y, rect.width, rect.height);<br /> }<br /> <br /> <br /> function draw_spring(x_start, x_end, y, n, h) {<br /> ctx.lineWidth = 2;<br /> ctx.strokeStyle = &quot;#7394cb&quot;;<br /> var L = x_end - x_start;<br /> for (var i = 0; i &lt; n; i++) {<br /> var x_st = x_start + L / n * i;<br /> var x_end = x_start + L / n * (i + 1);<br /> var l = x_end - x_st;<br /> ctx.beginPath();<br /> ctx.bezierCurveTo(x_st, y, x_st + l / 4, y + h, x_st + l / 2, y);<br /> ctx.bezierCurveTo(x_st + l / 2, y, x_st + 3 * l / 4, y - h, x_st + l, y);<br /> ctx.stroke();<br /> }<br /> }<br /> }</div> 188.243.39.146 http://tm.spbstu.ru/?title=Analysis_of_a_simple_nonlinear_oscillating_system&diff=8962 Analysis of a simple nonlinear oscillating system 2017-01-18T15:33:24Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Исследование простейшей нелинейной колебательной системы]]<br /> [[Virtual laboratory]] &gt; Analysis of a simple nonlinear oscillating system &lt;HR&gt;<br /> <br /> This demonstration stand shows a dependence of the velocity of a mass on a nonlinear spring. There are a few nonlinear equations that can be selected in &quot;Configuration&quot; window.<br /> <br /> If you want to define your own non-linear spring, use &quot;Add&quot; button at the bottom of the program frame. To the right of the button you can set the parameters of the spring in the format &lt;math&gt;k x^s&lt;/math&gt;, where &lt;math&gt;k&lt;/math&gt; is the coefficient of a nonlinear term, &lt;math&gt;s&lt;/math&gt; is the degree of nonlinearity. Each term of the equation is displayed as a button. By clicking the button you can remove a part of the equation.<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Spring/New_spring_v1.3_constructor/draw_spring.html |width=830 |height=550 |border=0 }}<br /> <br /> Developers: [[D.V. Tsvetkov]], [[A.M. Krivtsov]].<br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> [[Category: Programming]]<br /> [[Category: JavaScript]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Analysis_of_a_simple_harmonic_oscillator&diff=8961 Analysis of a simple harmonic oscillator 2017-01-18T15:31:19Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Исследование простейшей линейной колебательной системы]]<br /> We developed a program that calculates the actual velocity of a mass on a linear spring.<br /> &lt;math&gt;<br /> \def\MYdef{\mathrel{\stackrel{\rm def}=}}<br /> \def\({\left(}<br /> \def\){\right)}<br /> &lt;/math&gt;<br /> The Hooke's law has the form:<br /> ::&lt;math&gt;<br /> F = - Cu,<br /> &lt;/math&gt;<br /> <br /> ::&lt;math&gt;<br /> m \ddot u + Cu = 0.<br /> &lt;/math&gt;<br /> <br /> Dividing by &lt;math&gt;m&lt;/math&gt; and multiplying by &lt;math&gt;\dot u&lt;/math&gt; we arrive at:<br /> ::&lt;math&gt;<br /> \ddot u \dot u + \omega^2 \dot u u = 0, \quad \omega_0 \MYdef \sqrt{\frac{C}{m}},<br /> &lt;/math&gt;<br /> <br /> ::&lt;math&gt;<br /> \dot u^2 + \omega^2 u^2 = 0, \quad \(x^2(t)\)'_t = 2x(t)\dot u(t),<br /> &lt;/math&gt;<br /> <br /> ::&lt;math&gt;<br /> \(\frac{\dot u}{\omega}\)^2 + u^2 = 0.<br /> &lt;/math&gt;<br /> <br /> By introducing notation<br /> ::&lt;math&gt;\frac{\dot u}{\omega} = y, \quad u = x&lt;/math&gt;.<br /> <br /> We obtain:<br /> &lt;math&gt; y^2 + x^2 = 0 &lt;/math&gt;.<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Spring/New_spring_v1.3_no_constructor/draw_spring.html |width=830 |height=550 |border=0 }}<br /> <br /> Developers: [[D.V. Tsvetkov]], [[A.M. Krivtsov]].<br /> <br /> &lt;!--[[Category: Virtual laboratory]]<br /> [[Category: Programming]]<br /> [[Category: JavaScript]]--&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Interactive_harmonic_oscillator_model&diff=8960 Interactive harmonic oscillator model 2017-01-18T15:28:10Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Интерактивная модель простейшей колебательной системы]]<br /> [[Virtual laboratory]] &gt; [[Interactive harmonic oscillator model ]] &lt;HR&gt;<br /> <br /> You can drag right or left a mass on a spring to start the oscillations:<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Spring/Spring_v2-1_release/Spring.html |width=645 |height=565 |border=0 }}<br /> <br /> Download [[Media:Spring_v2-1_release.zip|Spring_v2-1_release.zip]].<br /> <br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The program text in the language JavaScript (Developers [[D.V. Tsvetkov]], [[A.M. Krivtsov]])''' &lt;div class=&quot;mw-collapsible-content&quot;&gt;<br /> File '''&quot;Spring.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> window.addEventListener(&quot;load&quot;, Main_Spring, true);<br /> function Main_Spring() {<br /> <br /> var canvas = spring_canvas;<br /> canvas.onselectstart = function () {return false;}; // cancel canvas selection<br /> var ctx = canvas.getContext(&quot;2d&quot;); // Drawing takes place in the ctx<br /> var w = canvas.width; // the width of the window in the estimated coordinates<br /> var h = canvas.height; // the height of the window in the estimated coordinates<br /> <br /> var Pi = 3.1415926; // the number &quot;PI&quot;<br /> <br /> var m0 = 1; // weight scale<br /> var T0 = 1; // the time scale <br /> <br /> var k0 = 2 * Pi / T0; // frequency scale<br /> var C0 = m0 * k0 * k0; // hardness scale<br /> var B0 = 2 * m0 * k0; // viscosity scale<br /> <br /> // *** Assignment of physical parameters ***<br /> <br /> var m = 1 * m0; // weight<br /> var C = 1 * C0; // stiffness<br /> var B = .1 * B0; // viscosity<br /> slider_m.value = (m / m0).toFixed(1); number_m.value = (m / m0).toFixed(1);<br /> slider_C.value = (C / C0).toFixed(1); number_C.value = (C / C0).toFixed(1);<br /> slider_B.value = (B / B0).toFixed(1); number_B.value = (B / B0).toFixed(1);<br /> <br /> // *** Assignment the parameters of computing ***<br /> <br /> var fps = 60; // frames per second - the number of frames per second <br /> var spf = 10; // steps per frame - the number of integration steps between frames <br /> var dt = 0.05 * T0 / fps; // the step of integration <br /> var steps = 0; // the number of integration steps<br /> function setM(new_m) {m = new_m * m0;}<br /> function setC(new_C) {C = new_C * C0;}<br /> function setB(new_B) {B = new_B * B0;}<br /> <br /> slider_m.oninput = function() {number_m.value = slider_m.value; setM(slider_m.value);};<br /> number_m.oninput = function() {slider_m.value = number_m.value; setM(number_m.value);};<br /> slider_C.oninput = function() {number_C.value = slider_C.value; setC(slider_C.value);};<br /> number_C.oninput = function() {slider_C.value = number_C.value; setC(number_C.value);};<br /> slider_B.oninput = function() {number_B.value = slider_B.value; setB(slider_B.value);};<br /> number_B.oninput = function() {slider_B.value = number_B.value; setB(number_B.value);};<br /> <br /> var count = true; // whether or not the calculation of a system<br /> var v = 0; // the speed of the body<br /> <br /> var rw = canvas.width / 30; var rh = canvas.height / 1.5;<br /> var x0 = 15 * rw - rw / 2; var y0 = rh / 1.33 - rh / 2;<br /> <br /> // the parameters of the spring<br /> var coil = 10; // the number of turns<br /> var startX = 0; // fixing springs<br /> <br /> // create a rectangle<br /> var rect = {<br /> x: x0, width: rw,<br /> y: y0, height: rh,<br /> fill: &quot;rgba(0, 0, 255, 1)&quot; // color<br /> <br /> };<br /> <br /> // capture the rectangle with the mouse<br /> var mx_; // the buffer position of the mouse <br /> document.onmousedown = function(e) { // function by pressing the mouse button<br /> var m = mouseCoords(e); // received the estimated coordinates of the mouse cursor<br /> <br /> var x = rect.x;<br /> var xw = rect.x + rect.width;<br /> var y = rect.y;<br /> var yh = rect.y + rect.height;<br /> if (x &lt;= m.x &amp;&amp; xw &gt;= m.x &amp;&amp; y &lt;= m.y &amp;&amp; yh &gt;= m.y) {<br /> if (e.which == 1) { // Left mouse button is pressed<br /> rect.xPlus = rect.x - m.x; // cursor shift relative to the sinker on the x<br /> rect.yPlus = rect.y - m.y; // cursor shift relative to the sinker on the y<br /> mx_ = m.x;<br /> count = false;<br /> document.onmousemove = mouseMove; // until a key is pressed - is working on the movement<br /> }<br /> }<br /> };<br /> <br /> document.onmouseup = function(e) { // function when you release the mouse button<br /> document.onmousemove = null; // when the key is released - no movement function<br /> count = true;<br /> };<br /> <br /> function mouseMove(e) { // function when you move the mouse , it works only with the left mouse button <br /> var m = mouseCoords(e); // received the estimated coordinates of the mouse cursor<br /> rect.x = m.x + rect.xPlus;<br /> // v = 6.0 * (m.x - mx_) / dt / fps; // the preservation of inertia<br /> v = 0;<br /> mx_ = m.x;<br /> }<br /> <br /> function mouseCoords(e) { // the function returns the calculated coordinates of the mouse cursor<br /> var m = [];<br /> var rect = canvas.getBoundingClientRect();<br /> m.x = (e.clientX - rect.left);<br /> m.y = (e.clientY - rect.top);<br /> return m;<br /> }<br /> <br /> // график<br /> var vGraph = new TM_graph( // determine the timetable<br /> &quot;#vGraph&quot;, // on html- element #vGraph<br /> 250, // how many steps on the &quot;x&quot; axis shows<br /> -1, 1, 0.2); // min. value of Y -axis , max . value of Y -axis , Y -axis step<br /> <br /> function control() {<br /> calculate();<br /> draw();<br /> requestAnimationFrame(control);<br /> }<br /> control();<br /> // setInterval(control, 1000 / fps); // Starting system<br /> <br /> function calculate() {<br /> if (!count) return;<br /> for (var s=1; s&lt;=spf; s++) {<br /> var f = - C * (rect.x - x0) - B * v;<br /> v += f / m * dt;<br /> rect.x += v * dt;<br /> <br /> steps++;<br /> if (steps % 80 == 0) vGraph.graphIter(steps, (rect.x-x0)/canvas.width*2); // submit the data on a graph<br /> }<br /> <br /> }<br /> <br /> function draw() {<br /> ctx.clearRect(0, 0, w, h);<br /> <br /> ctx.strokeStyle = &quot;#0aa&quot;;<br /> ctx.beginPath();<br /> ctx.moveTo(0, y0+rh/2);<br /> for (var i = 1; i &lt;= coil + 1; i++ ) {<br /> var x;<br /> var y;<br /> if (i != coil + 1) {<br /> x = startX + ((rect.x - startX))/coil*i - ((rect.x - startX))/coil/2;<br /> y = y0+rh/2 + ((i%2==0)?1:-1)*30;<br /> } else {<br /> x = startX + ((rect.x - startX))/coil*i - ((rect.x - startX))/coil;<br /> y = y0+rh/2;<br /> }<br /> <br /> ctx.lineTo(x, y);<br /> }<br /> ctx.stroke();<br /> <br /> ctx.fillStyle = &quot;#0000ff&quot;;<br /> ctx.fillRect(rect.x, rect.y, rect.width, rect.height);<br /> }<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> Файл '''&quot;Spring.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;meta charset=&quot;UTF-8&quot; /&gt;<br /> &lt;title&gt;Пружина&lt;/title&gt;<br /> &lt;script src=&quot;Spring.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;jquery.flot.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;TM_v2-1.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;canvas id=&quot;spring_canvas&quot; width=&quot;600&quot; height=&quot;100&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_m&quot; min=&quot;0.01&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 150px;&quot; /&gt;<br /> m = &lt;input type=&quot;number&quot; id=&quot;number_m&quot; min=&quot;0.01&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 50px;&quot; /&gt;&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_C&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 150px;&quot; /&gt;<br /> C = &lt;input type=&quot;number&quot; id=&quot;number_C&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 50px;&quot; /&gt;&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_B&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 150px;&quot; /&gt;<br /> B = &lt;input type=&quot;number&quot; id=&quot;number_B&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.01 style=&quot;width: 50px;&quot; /&gt;&lt;br&gt;&lt;br&gt;<br /> <br /> &lt;table&gt;<br /> &lt;tr&gt;&lt;td&gt;x&lt;/td&gt;<br /> &lt;td&gt;&lt;div id=&quot;vGraph&quot; style=&quot;width:600px; height:300px; clear:both;&quot;&gt;&lt;/div&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;steps&lt;/td&gt;&lt;/tr&gt;<br /> &lt;/table&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=One-dimensional_Brownian_motion&diff=8959 One-dimensional Brownian motion 2017-01-18T15:23:06Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Одномерное броуновское движение]]<br /> [[Virtual laboratory]] &gt; Heat input &gt; [[One-dimensional Brownian motion | into a particle]] &lt;HR&gt;<br /> <br /> This demonstration stand models continuous heating of a set of particles (the Brownian motion).<br /> <br /> &lt;math&gt;d \dot u = -\eta \dot u \, dt - \omega u \, dt + b p \sqrt{dt}&lt;/math&gt;<br /> <br /> where &lt;math&gt;\eta&lt;/math&gt; is the specific viscosity, &lt;math&gt;\sigma^2&lt;/math&gt; is the variance, &lt;math&gt;\omega&lt;/math&gt; is the stiffness.<br /> <br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Equations/Heating/Heating_v1.2/equations.html |width=100% |height=750 |border=0 }}<br /> <br /> &lt;!--<br /> == List of projects ==<br /> *Heat input:<br /> **[[One-dimensional Brownian motion | in particle]]<br /> **[[Heat a one- dimensional grain| in grain (the output of displacements and velocities)]]<br /> **[[Heat a one- dimensional grain: temperature | in grain (the output of temperature)]]--&gt;<br /> <br /> [[Category: Virtual_laboratory]]</div> 188.243.39.146 http://tm.spbstu.ru/?title=Modeling_of_a_shock_absorber&diff=8958 Modeling of a shock absorber 2017-01-18T15:19:33Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Моделирование амортизатора]]<br /> This demonstration stand shows the work of a shock absorber<br /> <br /> A '''shock absorber''' (in reality, a shock &quot;damper&quot;) is a mechanical or hydraulic device designed to absorb and damp shock impulses. It does this by converting the kinetic energy of the shock into another form of energy (typically heat) which is then dissipated.<br /> <br /> [[File:Amor.jpg|350px|left| Automobile shock absorber]]<br /> <br /> The equations of motion have the form (the velocity vector is directed upwards):<br /> ::&lt;math&gt;<br /> m \ddot{y} = -mg - c \Delta y - F_{com}^{ten} \dot{y}, \\<br /> F_{com} = \frac{\pi^{2} * E *\pi * d_{rod}^{4}}{64 * L^{2}},\\<br /> F_{ten} = \frac{d_{pist}^{2} * \pi * p} {4},\\<br /> &lt;/math&gt;<br /> where &lt;math&gt;E&lt;/math&gt; is the modulus of elasticity (Young's modulus) &lt;math&gt;E= 2.05 \cdot 10^{11}&lt;/math&gt; Pa;<br /> <br /> &lt;math&gt;F_{com}&lt;/math&gt; is the force directed opposite to the velocity vector (acts during the ''com''pression of a piston);<br /> <br /> &lt;math&gt;F_{ten}&lt;/math&gt; is the force directed along the velocity vector (acts on the piston during the ''ten''sion).<br /> <br /> You can drag and drop the yellow square to load the damper.<br /> <br /> The time dependence of 'y' coordinate is plotted below:<br /> <br /> {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Bogdanov/shock_absorbers/index.html |width=1000 |height=750 |border=0 }}<br /> <br /> Download [[Media:Shock_absorbers.zip|Shock_absorbers.zip]].<br /> <br /> &lt;div class=&quot;mw-collapsible mw-collapsed&quot; style=&quot;width:100%&quot; &gt;<br /> '''The program text on JavaScript (developer [[:ru:Богданов Дмитрий|Bogdanov Dmitriy]], the code based on the program by[[Tsvetkov Denis]]):''' &lt;div class=&quot;mw-collapsible-content&quot;&gt;<br /> File '''&quot;Spring.js&quot;'''<br /> &lt;syntaxhighlight lang=&quot;javascript&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> window.addEventListener(&quot;load&quot;, Main_Spring, true);<br /> function Main_Spring() {<br /> <br /> var canvas = spring_canvas;<br /> canvas.onselectstart = function () {return false;}; // disabling canvas selection<br /> var ctx = canvas.getContext(&quot;2d&quot;); // ctx drawing <br /> var w = canvas.width; // the width of the window in the actual coordinates<br /> var h = canvas.height; // the height of the window in the actual coordinates<br /> <br /> var Pi = Math.PI; // the 'Pi' number<br /> var g = 9.81;<br /> var m0 = 1; // the scale of weight<br /> var T0 = 1; // the scale of time (period of oscillation the initial system)<br /> <br /> var k0 = 2 * Pi / T0; // the scale of frequency<br /> var C0 = 1; // the scale of stiffness<br /> var D0 = 0.001; // the diameter<br /> var p0 = 1; // the pressure<br /> var E0 = 1e-6;<br /> var L = 300;<br /> // *** Setting the physical parameters ***<br /> var E = 2.05e11 * E0; // the elastic modulus<br /> var m = 3 * m0; // the mass<br /> var C = 15 * C0; // the stiffness<br /> var Dp = 43.1 * D0; // the piston diameter<br /> var Dsh = 17.3 * D0; // the rod diameter<br /> var p = 4 * p0; // the pressure<br /> slider_m.value = (m / m0).toFixed(1); number_m.value = (m / m0).toFixed(1);<br /> slider_C.value = (C / C0).toFixed(1); number_C.value = (C / C0).toFixed(1);<br /> slider_Dp.value = (Dp / D0).toFixed(1); number_Dp.value = (Dp / D0).toFixed(1);<br /> slider_Dsh.value = (Dsh / D0).toFixed(1); number_Dsh.value = (Dsh / D0).toFixed(1);<br /> slider_p.value = (p / p0).toFixed(1); number_p.value = (p / p0).toFixed(1);<br /> slider_L.value = (L).toFixed(1); number_L.value = (L).toFixed(1);<br /> <br /> // *** Setting the computing parameters***<br /> <br /> var fps = 100; // frames per second<br /> var spf = 50; // steps per frame - the number of integration steps between frames (increases the calculation speed)<br /> var dt = 0.05 * T0 / fps; // the integration step (the quality of calculation)<br /> var steps = 0; // the number of integration steps<br /> <br /> function setM(new_m) {m = new_m * m0;}<br /> function setC(new_C) {C = new_C * C0;}<br /> function setDp(new_Dp) {Dp = new_Dp * D0;}<br /> function setP(new_p) {p = new_p * p0;}<br /> function setDsh(new_Dsh) {Dsh = new_Dsh * D0;}<br /> function setL(new_L) {L = new_L;}<br /> <br /> slider_m.oninput = function() {number_m.value = slider_m.value; setM(slider_m.value);};<br /> number_m.oninput = function() {slider_m.value = number_m.value; setM(number_m.value);};<br /> slider_C.oninput = function() {number_C.value = slider_C.value; setC(slider_C.value);};<br /> number_C.oninput = function() {slider_C.value = number_C.value; setC(number_C.value);};<br /> slider_p.oninput = function() {number_p.value = slider_p.value; setP(slider_p.value);};<br /> number_p.oninput = function() {slider_p.value = number_p.value; setP(number_p.value);};<br /> slider_Dp.oninput = function() {number_Dp.value = slider_Dp.value; setDp(slider_Dp.value);};<br /> number_Dp.oninput = function() {slider_Dp.value = number_Dp.value; setDp(number_Dp.value);};<br /> slider_Dsh.oninput = function() {number_Dsh.value = slider_Dsh.value; setDsh(slider_Dsh.value);};<br /> number_Dsh.oninput = function() {slider_Dsh.value = number_Dsh.value; setDsh(number_Dsh.value);};<br /> slider_L.oninput = function() {number_L.value = slider_L.value; setL(slider_L.value);};<br /> number_L.oninput = function() {slider_L.value = number_L.value; setL(number_L.value);};<br /> <br /> var count = true; // calculate the system<br /> var v = 0; // the body speed<br /> <br /> var rw = canvas.width / 10; var rh = canvas.height;<br /> var x0 = canvas.width / 2 - 25; var y0 = rh/2-25;<br /> <br /> // the spring settings<br /> var coil = 11; // the number of coils<br /> var startY = h; // the spring fixation<br /> <br /> // a fancy yellow square<br /> var rect = {<br /> x: x0, width: 50,<br /> y: y0, height: 50,<br /> fill: &quot;rgba(112, 155, 255, 1)&quot; // yellow<br /> };<br /> <br /> // mouse control<br /> var my_; // mouse position buffer (to calculate the initial speed of the ball)<br /> document.onmousedown = function(e) { // mouse click function <br /> if (Dp &lt;= Dsh)<br /> { <br /> alert(&quot;The diameter of the piston must be larger than the diameter of the rod&quot;);<br /> slider_Dsh.value = (Dp / D0 - 1).toFixed(1); <br /> number_Dsh.value = (Dp / D0 - 1).toFixed(1);<br /> setDsh(slider_Dsh.value);<br /> setDsh(number_Dsh.value);<br /> }<br /> else {<br /> var m = mouseCoords(e); // getting coordinates of the mouse cursor<br /> var x = rect.x;<br /> var xw = rect.x + rect.width;<br /> var y = rect.y;<br /> var yh = rect.y + rect.height;<br /> if (x &lt;= m.x &amp;&amp; xw &gt;= m.x &amp;&amp; y &lt;= m.y &amp;&amp; yh &gt;= m.y) {<br /> if (e.which == 1) { // left mouse button is pressed<br /> rect.xPlus = rect.x - m.x; // cursor displacement with respect to the mass on the X axis<br /> rect.yPlus = rect.y - m.y; // cursor displacement with respect to the mass on the Y axis<br /> my_ = m.y;<br /> count = false;<br /> document.onmousemove = mouseMove; // while the mouse button is pressed the function works<br /> }<br /> }<br /> }<br /> };<br /> <br /> document.onmouseup = function(e) { // the working function when you release the mouse button<br /> document.onmousemove = null; // when the key is released displacement function does not work<br /> count = true;<br /> };<br /> <br /> function mouseMove(e) { // the function works only while holding LMB<br /> var m = mouseCoords(e); // getting calculated coordinates of the mouse cursor<br /> rect.y = m.y + rect.yPlus;<br /> // v = 6.0 * (m.x - mx_) / dt / fps; // inertia conservation law<br /> v = 0;<br /> my_ = m.y;<br /> }<br /> <br /> function mouseCoords(e) { // the function returns the calculated coordinates of the mouse cursor<br /> var m = [];<br /> var rect = canvas.getBoundingClientRect();<br /> m.x = (e.clientX - rect.left);<br /> m.y = (e.clientY - rect.top);<br /> return m;<br /> }<br /> <br /> // the graph<br /> var vGraph = new New_graph( // initialisation of the graph<br /> &quot;#vGraph&quot;, // at html-page #vGraph<br /> 250, // the number of steps by X axis<br /> -1, 1, 0.2); // the minimum value of Y axis, the maximum value of Y axis, step along the Y axis<br /> <br /> function control() {<br /> calculate();<br /> draw();<br /> requestAnimationFrame(control);<br /> }<br /> control();<br /> // setInterval(control, 1000 / fps); // starting system<br /> <br /> <br /> function calculate() {<br /> if (!count) return;<br /> for (var s=1; s&lt;=spf; s++) {<br /> var Fo = Math.pow(Dp/D0, 2) * Pi * p / 4;<br /> var Fs = Math.pow(Pi, 3) * E * Math.pow(Dsh/D0, 4) / (64 * L * L * 100); <br /> document.getElementById('Fo').innerHTML = '&lt;b&gt;F отб. =&lt;/b&gt;'+Fo.toFixed(2)+' H';<br /> document.getElementById('Fs').innerHTML = '&lt;b&gt;F сж. =&lt;/b&gt;'+Fs.toFixed(2)+' H';<br /> var f;<br /> if (v &gt;= 0){<br /> f = -C * (rect.y - y0) - Fs * D0 * v;<br /> };<br /> if (v &lt; 0){<br /> f = -C * (rect.y - y0) - Fo * D0 * v; <br /> };<br /> v += f / m * dt;<br /> rect.y += v * dt;<br /> steps++;<br /> if (steps % 80 == 0) vGraph.graphIter(steps, -(rect.y-y0)/canvas.height*2); // streaming the data on the graph<br /> }<br /> <br /> }<br /> function draw() {<br /> ctx.clearRect(0, 0, w, h);<br /> ctx.fillStyle = &quot;#4B4747&quot;;<br /> ctx.fillRect(rect.x-22 , 480, 100, 20 );<br /> ctx.fillRect(rect.x + 18, rect.y + 40, 14, 900 )<br /> ctx.strokeStyle = &quot;#000&quot;;<br /> ctx.beginPath();<br /> for (var i = 0; i &lt;= coil; i++ ) {<br /> var x;<br /> var y;<br /> if (i != coil + 1) {<br /> y = startY + ((rect.y - startY))/coil*i;<br /> x = canvas.width/2 + ((i%2==0)?-1:1)*15 + (rect.x - x0)/coil*i;<br /> } else {<br /> y = startY + ((rect.y - startY))/coil*(i+1);<br /> x = canvas.width/2 + ((i%2==0)?1:-1)*15 + (rect.x - x0)/coil*(i+1);<br /> }<br /> if (i==0) x = x0+25;<br /> ctx.lineTo(x, y+5);<br /> }<br /> ctx.stroke();<br /> ctx.fillStyle = &quot;#FFFC06&quot;;<br /> ctx.fillRect(rect.x, rect.y, rect.width, rect.height);<br /> }<br /> }<br /> function New_graph(htmlElement, yArrayLen, minY, maxY, stepY){<br /> this.htmlElement = htmlElement;<br /> this.yArrayLen = yArrayLen;<br /> this.minY = minY;<br /> this.maxY = maxY;<br /> this.stepY = stepY;<br /> this.vArray = [];<br /> }<br /> New_graph.prototype.graphIter = function(x, y){<br /> this.vArray.push([x, y]); // adding a value to the end of the array<br /> if (this.vArray.length &gt; this.yArrayLen) this.vArray.shift(); // if the array has more 'yArrayLen' values, than remove the first one<br /> var htmlElement1 = this.htmlElement;<br /> var vArray1 = this.vArray;<br /> var minY1 = this.minY;<br /> var maxY1 = this.maxY;<br /> var stepY1 = this.stepY;<br /> $(function() {<br /> var options = {<br /> yaxis: {<br /> min: minY1,<br /> max: maxY1,<br /> tickSize: stepY1<br /> }<br /> };<br /> $.plot(htmlElement1, [vArray1], options); // drawing graph at the element &quot;vGraph&quot;<br /> });<br /> };<br /> <br /> New_graph.prototype.graph = function(data){<br /> this.vArray = data;<br /> var htmlElement1 = this.htmlElement;<br /> var vArray1 = this.vArray;<br /> var minY1 = this.minY;<br /> var maxY1 = this.maxY;<br /> var stepY1 = this.stepY;<br /> $(function() {<br /> var options = {<br /> yaxis: {<br /> min: minY1,<br /> max: maxY1,<br /> tickSize: stepY1<br /> }<br /> };<br /> $.plot(htmlElement1, [vArray1], options); // drawing graph at the element &quot;vGraph&quot;<br /> });<br /> };<br /> <br /> <br /> <br /> function New(){}<br /> New.prototype.addSlider = function(htmlSliderElement, htmlValueElement, minVal, maxVal, stepVal, startVal, setFunc){<br /> $(function() {<br /> $( htmlSliderElement ).slider({ // element &quot;slider_m&quot;<br /> value:startVal, min: minVal, max: maxVal, step: stepVal,<br /> slide: function( event, ui ) { // it works during movement of the slider<br /> $( htmlValueElement ).text( ui.value.toFixed(2) ); // it assigns a value to the text field &quot;value_m&quot;<br /> setFunc(ui.value);<br /> }<br /> });<br /> });<br /> };<br /> New.prototype.addInputSlider = function(htmlSliderElement, htmlValueElement, minVal, maxVal, stepVal, startVal, setFunc, pressFunc){<br /> window[pressFunc] = function(event){<br /> var regExpPattern = /[0-9]+[.]?[0-9]+/;<br /> var inputVal = document.getElementById(htmlValueElement.substr(1)).value;<br /> if (regExpPattern.test(inputVal.toString()) &amp;&amp; inputVal != 0){setFunc(inputVal);}<br /> };<br /> <br /> $(function() {<br /> $( htmlSliderElement ).slider({<br /> value:startVal, min: minVal, max: maxVal, step: stepVal,<br /> slide: function( event, ui ) {<br /> $( htmlValueElement ).val( ui.value.toFixed(2) );<br /> setFunc(ui.value);<br /> }<br /> });<br /> $( htmlValueElement ).val($( htmlSliderElement ).slider( &quot;value&quot; ).toFixed(2) );<br /> });<br /> };<br /> &lt;/syntaxhighlight&gt;<br /> File '''&quot;index.html&quot;'''<br /> &lt;syntaxhighlight lang=&quot;html5&quot; line start=&quot;1&quot; enclose=&quot;div&quot;&gt;<br /> &lt;!DOCTYPE html&gt;<br /> &lt;html&gt;<br /> &lt;head&gt;<br /> &lt;meta charset=&quot;UTF-8&quot; /&gt;<br /> &lt;title&gt;Амортизатор&lt;/title&gt;<br /> &lt;script src=&quot;Spring.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;jquery.flot.js&quot;&gt;&lt;/script&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br /> &lt;table&gt;<br /> &lt;tr&gt;<br /> &lt;td&gt;&lt;canvas id=&quot;spring_canvas&quot; width=&quot;300&quot; height=&quot;500&quot; style=&quot;border:1px solid #000000;&quot;&gt;&lt;/canvas&gt;&lt;/td&gt;<br /> &lt;td&gt;&lt;div id=&quot;vGraph&quot; style=&quot;width:600px; height:300px; clear:both;&quot;&gt;&lt;/div&gt;&lt;/td&gt; <br /> &lt;/tr&gt;<br /> &lt;tr&gt; <br /> &lt;td&gt;&lt;input type=&quot;range&quot; id=&quot;slider_m&quot; min=&quot;0.1&quot; max=&quot;10&quot; step=0.1 style=&quot;width: 120px;&quot; /&gt;<br /> M = &lt;input type=&quot;number&quot; id=&quot;number_m&quot; min=&quot;0.1&quot; max=&quot;10&quot; step=0.1 style=&quot;width: 40px;&quot; /&gt; kg&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_C&quot; min=&quot;0&quot; max=&quot;50&quot; step=0.1 style=&quot;width: 120px;&quot; /&gt; <br /> C = &lt;input type=&quot;number&quot; id=&quot;number_C&quot; min=&quot;0&quot; max=&quot;50&quot; step=0.1 style=&quot;width: 40px;&quot; /&gt; *10^5 N/m&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_Dp&quot; min=&quot;0&quot; max=&quot;100&quot; step=0.1 style=&quot;width: 120px;&quot; /&gt;<br /> dpist = &lt;input type=&quot;number&quot; id=&quot;number_Dp&quot; min=&quot;0&quot; max=&quot;100&quot; step=0.1 style=&quot;width: 40px;&quot; /&gt; mm&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_Dsh&quot; min=&quot;0&quot; max=&quot;100&quot; step=0.1 style=&quot;width: 120px;&quot; /&gt;<br /> drod = &lt;input type=&quot;number&quot; id=&quot;number_Dsh&quot; min=&quot;0&quot; max=&quot;98&quot; step=0.1 style=&quot;width: 40px;&quot; /&gt; mm&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_L&quot; min=&quot;50&quot; max=&quot;500&quot; step=1 style=&quot;width: 120px;&quot; /&gt;<br /> L = &lt;input type=&quot;number&quot; id=&quot;number_L&quot; min=&quot;50&quot; max=&quot;500&quot; step=1 style=&quot;width: 40px;&quot; /&gt; mm&lt;br&gt;<br /> &lt;input type=&quot;range&quot; id=&quot;slider_p&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.1 style=&quot;width: 120px;&quot; /&gt;<br /> p = &lt;input type=&quot;number&quot; id=&quot;number_p&quot; min=&quot;0&quot; max=&quot;10&quot; step=0.1 style=&quot;width: 40px;&quot; /&gt; MPa&lt;br&gt;&lt;br&gt;&lt;/td&gt;<br /> &lt;td&gt;<br /> &lt;div id = &quot;Fo&quot;&gt; &lt;/div&gt;<br /> &lt;div id = &quot;Fs&quot;&gt; &lt;/div&gt;<br /> &lt;div id = &quot;info&quot;&gt; where: m is the mass, C is the coefficient of elasticity &lt;br&gt;dpist is the piston diameter, drod is the rod diameter&lt;br&gt;L is the rod length, p is the pressure in the shock absorber&lt;br&gt;Freb is the force of the tension stroke &lt;br&gt;Fcom is the force of the compression stroke <br /> &lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;<br /> &lt;/syntaxhighlight&gt;<br /> &lt;/div&gt;<br /> &lt;/div&gt;</div> 188.243.39.146 http://tm.spbstu.ru/?title=Satellite_Polytech&diff=8957 Satellite Polytech 2017-01-18T15:11:46Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Молодёжная лаборатория &quot;Космические Технологии&quot;]]<br /> [[SCY]] &gt; '''Satellite Polytech''' &lt;HR&gt;<br /> <br /> <br /> [[File:Polysat.jpg|400px|thumb|]]<br /> <br /> === Description===<br /> Students design department “Satellite Polytech” is a part of [[SCY]] (Center for scientific and technical creativity of the youth). The main focus of the design department is involving students into the project works, as well as experience and knowledge exchange between the university students, high school students, engineers and researchers. It also aims at creating experimental scientific equipment, machinery and robotics. <br /> <br /> The first project of the design department is creation of a student satellite of a CubeSat type. The project is currently being developed at Peter the Great St. Petersburg Polytechnic University. The design and construction of the satellite, as well as the program code development, loads analysis and equipping the satellite with radioelectronic systems is being done by the design department team. Undergraduate, graduate and postgraduate students are involved in the project. Also, high school students participate in it. Satellite will be equipped with a camera that would allow taking panoramic images from space and would be able to transmit the photos to Earth. All the images will be open access. There will also be other equipment on the satellite for performing scientific experiments (details to follow).<br /> <br /> The launch of the satellite is planned to be done with the support of the Russian Federal Space Agency and the Ministry of Education and Science of the Russian Federation.<br /> <br /> '''The project will contribute toward:'''<br /> <br /> * popularization of space science among youth; <br /> * familiarise university and high school students with space technology;<br /> * scientific development and student research enhancement;<br /> * promote interest of university and high school students for research in space industry and high-tech.<br /> <br /> ===Project goals===<br /> <br /> 1. Development of documentation of the satellite systems;<br /> <br /> 2. Construction and testing of the systems;<br /> <br /> 3. Construction of a prototype of «Satellite Polytech»;<br /> <br /> 4. Testing the satellite in the stratosphere;<br /> <br /> 5. Modification of the satellite’s systems;<br /> <br /> 6. Preparation for the launch into the orbit .<br /> <br /> ===The team===<br /> <br /> * Andrey Murachev, team leader<br /> <br /> * Maksim Lerman and Aleksandr Kornev, constructor engineers<br /> <br /> * Nilan Jayasinghe and Igor Nikolaev, electricians<br /> <br /> * Maksim Zakharenkov and Anton Matveev, software developers (C++)<br /> <br /> * Anna Terskaya and Ilya Rutkovskiy, radio link<br /> <br /> * Artur Perevalov and Leonid Kulikov, payload<br /> <br /> * Polina Fish, PR<br /> <br /> ===Project materials ===<br /> * [https://drive.google.com/folderview?id=0B1Wih-3yYmjpfjJpempJZFJqNGlISVc0NGFvcjBRRkxMbE5qa1ljeG1BZXlWekRaam1SRjQ&amp;usp=sharing Project documents]<br /> <br /> ===Literature, articles and useful links===<br /> * [http://cubesat.aero.cst.nihon-u.ac.jp/english/seedsdetail_e.html CubeSat from Nihon University]<br /> * [http://lss.mes.titech.ac.jp/ssp/cute1.7/cute1.7-1/index_e.html Cubesat from Tokyo Institute of Technology Matunaga Laboratory for Space System]<br /> * [http://dtusat1.dtusat.dtu.dk/group.php?c_gid=1 cubesat from Technical University of Denmark]<br /> * [http://vk.com/doc6161_351613799?hash=29103841a608ccd65e&amp;dl=ae2404753fca547322 The Pennsylvania State University. Development and analysis of the thermal design for the osiris-3u cubesat]<br /> * [http://www.crn2.inpe.br/conasat1/projetos_cubesat/projetos/AAUSAT%20-%20Aalborg%20University%20-%20Denmark/AAUSAT%20-%20EPS%20-%20Project%202.pdf Optimized Design of Power Supply for CubeSat at Aalborg University]<br /> * [https://www.wpi.edu/Pubs/E-project/Available/E-project-031212-121649/unrestricted/Mechanical,_Power,_and_Thermal_Subsystem_Design_for_a_CubeSat.pdf Mechanical, Power, and Thermal Subsystem Design for a CubeSat Mission from Worcester polytechnic institute]<br /> * [http://www.space.aau.dk/cubesat/documents/ Documents from SATLAB Aalborg University Denmark]<br /> * [http://scholarworks.sjsu.edu/cgi/viewcontent.cgi?article=7740&amp;context=etd_theses Thermal Modeling of Nanosat from San Jose State University]<br /> * [http://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1090&amp;context=smallsat Cubesat experiment]<br /> * [http://php.scripts.psu.edu/dept/sspl/index.php?/categories/8-OSIRIS-CubeSat Orisus cubesat from the Student Space Programs Laboratory (SSPL) at the Pennsylvania State University]<br /> * [http://www.raumfahrt.fh-aachen.de/compass-1/publications.htm Compass Cubesat]<br /> <br /> ===Crowdfunding===<br /> * [http://green3green.livejournal.com/43835.html Eco crowdfunding: how 330 000 rubles were collected for the book &quot;Green Driver&quot;, by Roman Sablin]<br /> * [http://opytnym-putyem.podster.fm/81 On crowdfunding]<br /> * [https://vk.com/video8894_167739745 Promo video]</div> 188.243.39.146 http://tm.spbstu.ru/?title=Satellite_Polytech&diff=8956 Satellite Polytech 2017-01-18T15:09:09Z <p>188.243.39.146: </p> <hr /> <div>[[ru:Сателлит Политех]]<br /> [[SCY]] &gt; '''Satellite Polytech''' &lt;HR&gt;<br /> <br /> <br /> [[File:Polysat.jpg|400px|thumb|]]<br /> <br /> === Description===<br /> Students design department “Satellite Polytech” is a part of [[SCY]] (Center for scientific and technical creativity of the youth). The main focus of the design department is involving students into the project works, as well as experience and knowledge exchange between the university students, high school students, engineers and researchers. It also aims at creating experimental scientific equipment, machinery and robotics. <br /> <br /> The first project of the design department is creation of a student satellite of a CubeSat type. The project is currently being developed at Peter the Great St. Petersburg Polytechnic University. The design and construction of the satellite, as well as the program code development, loads analysis and equipping the satellite with radioelectronic systems is being done by the design department team. Undergraduate, graduate and postgraduate students are involved in the project. Also, high school students participate in it. Satellite will be equipped with a camera that would allow taking panoramic images from space and would be able to transmit the photos to Earth. All the images will be open access. There will also be other equipment on the satellite for performing scientific experiments (details to follow).<br /> <br /> The launch of the satellite is planned to be done with the support of the Russian Federal Space Agency and the Ministry of Education and Science of the Russian Federation.<br /> <br /> '''The project will contribute toward:'''<br /> <br /> * popularization of space science among youth; <br /> * familiarise university and high school students with space technology;<br /> * scientific development and student research enhancement;<br /> * promote interest of university and high school students for research in space industry and high-tech.<br /> <br /> ===Project goals===<br /> <br /> 1. Development of documentation of the satellite systems;<br /> <br /> 2. Construction and testing of the systems;<br /> <br /> 3. Construction of a prototype of «Satellite Polytech»;<br /> <br /> 4. Testing the satellite in the stratosphere;<br /> <br /> 5. Modification of the satellite’s systems;<br /> <br /> 6. Preparation for the launch into the orbit .<br /> <br /> ===The team===<br /> <br /> * Andrey Murachev, team leader<br /> <br /> * Maksim Lerman and Aleksandr Kornev, constructor engineers<br /> <br /> * Nilan Jayasinghe and Igor Nikolaev, electricians<br /> <br /> * Maksim Zakharenkov and Anton Matveev, software developers (C++)<br /> <br /> * Anna Terskaya and Ilya Rutkovskiy, radio link<br /> <br /> * Artur Perevalov and Leonid Kulikov, payload<br /> <br /> * Polina Fish, PR<br /> <br /> ===Project materials ===<br /> * [https://drive.google.com/folderview?id=0B1Wih-3yYmjpfjJpempJZFJqNGlISVc0NGFvcjBRRkxMbE5qa1ljeG1BZXlWekRaam1SRjQ&amp;usp=sharing Project documents]<br /> <br /> ===Literature, articles and useful links===<br /> * [http://cubesat.aero.cst.nihon-u.ac.jp/english/seedsdetail_e.html CubeSat from Nihon University]<br /> * [http://lss.mes.titech.ac.jp/ssp/cute1.7/cute1.7-1/index_e.html Cubesat from Tokyo Institute of Technology Matunaga Laboratory for Space System]<br /> * [http://dtusat1.dtusat.dtu.dk/group.php?c_gid=1 cubesat from Technical University of Denmark]<br /> * [http://vk.com/doc6161_351613799?hash=29103841a608ccd65e&amp;dl=ae2404753fca547322 The Pennsylvania State University. Development and analysis of the thermal design for the osiris-3u cubesat]<br /> * [http://www.crn2.inpe.br/conasat1/projetos_cubesat/projetos/AAUSAT%20-%20Aalborg%20University%20-%20Denmark/AAUSAT%20-%20EPS%20-%20Project%202.pdf Optimized Design of Power Supply for CubeSat at Aalborg University]<br /> * [https://www.wpi.edu/Pubs/E-project/Available/E-project-031212-121649/unrestricted/Mechanical,_Power,_and_Thermal_Subsystem_Design_for_a_CubeSat.pdf Mechanical, Power, and Thermal Subsystem Design for a CubeSat Mission from Worcester polytechnic institute]<br /> * [http://www.space.aau.dk/cubesat/documents/ Documents from SATLAB Aalborg University Denmark]<br /> * [http://scholarworks.sjsu.edu/cgi/viewcontent.cgi?article=7740&amp;context=etd_theses Thermal Modeling of Nanosat from San Jose State University]<br /> * [http://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1090&amp;context=smallsat Cubesat experiment]<br /> * [http://php.scripts.psu.edu/dept/sspl/index.php?/categories/8-OSIRIS-CubeSat Orisus cubesat from the Student Space Programs Laboratory (SSPL) at the Pennsylvania State University]<br /> * [http://www.raumfahrt.fh-aachen.de/compass-1/publications.htm Compass Cubesat]<br /> <br /> ===Crowdfunding===<br /> * [http://green3green.livejournal.com/43835.html Eco crowdfunding: how 330 000 rubles were collected for the book &quot;Green Driver&quot;, by Roman Sablin]<br /> * [http://opytnym-putyem.podster.fm/81 On crowdfunding]<br /> * [https://vk.com/video8894_167739745 Promo video]</div> 188.243.39.146 http://tm.spbstu.ru/?title=AlpineReplay&diff=8955 AlpineReplay 2017-01-18T14:58:23Z <p>188.243.39.146: </p> <hr /> <div>[[ru:AlpineReplay]]<br /> {{DISPLAYTITLE:&lt;span style=&quot;display:none&quot;&gt;{{FULLPAGENAME}}&lt;/span&gt;}}<br /> &lt;font size=&quot;5&quot;&gt; AlpineReplay&lt;/font&gt;<br /> [[File:Sticker AlpineReplay.png|300px|thumb|right]]<br /> <br /> == About ==<br /> <br /> The project was started in 2010 at the initiative of [http://www.linkedin.com/pub/anatole-lokshin/3/434/468 Anatoly Lokshin], CEO of AlpineReplay ltd. The project involves AlpineReplay ltd., HORIS ltd. and [[Main Page|Department &quot;Theoreticla Mechanics&quot;]] SPbPU. The main objective of the project is to create a mobile application for the skiers and snowboarders, allowing to log their detailed stats: track, speed, a number of jumps, stunt parameters, air time, a number of calories spent and much more.<br /> <br /> [[File:AlpineReplay_geography_eng.jpg|700px|thumb|center| Over 200 000 people all over the world use AlpineReplay app.]]<br /> <br /> == Areas of research == <br /> [[File:Snowboarder.jpg|250px|thumb|right|Object of research]]<br /> Employees and students of [[Main Page|Department &quot;Theoretical Mechanics&quot;]] conduct research within &quot;AlpineReplay&quot; project in the following directions:<br /> <br /> * development of the jump detection algorithm based on the fuzzy logic (MATLAB and C++)<br /> * identification of a rotation angle in a jump<br /> * development of a gyroscope calibration algorithm<br /> <br /> == Demonstration ==<br /> <br /> {{#widget:YouTube|id=fp76F6p-2g0}} {{#widget:YouTube| id=9TQG18lMxsc}} {{#widget:YouTube| id=IijLC9R-xRI}}<br /> <br /> == Download AlpineReplay application ==<br /> <br /> You can download AlpineReplay application using the following liks:<br /> <br /> * [https://play.google.com/store/apps/details?id=com.alpinereplay.android&amp;feature=search_result Android version]<br /> <br /> * [https://itunes.apple.com/us/app/alpinereplay-ski-snowboard/id457396498?mt=8 iPhone version]<br /> <br /> <br /> == Basic stunts of skiers and snowboarders ==<br /> <br /> * '''Spin'''<br /> Spins, as a rule, are done a frontside or backside, a snowboarder rotates 180° degrees clockwise/counterclockwise depending on the nature of the obstacle. Terms &quot;frontside&quot; and &quot;backside&quot; are used to describe snowboarder's spinning direction. &quot;Frontside&quot; indicates that a snowboarder in the goofy stance rotates clockwise, and in the regular stance, counterclockwise. &quot;Backside&quot; clockwise rotation is typical for the regular stance and the counterclockwise rotation is typical for the goofy stance.<br /> <br /> Term &quot;Cab&quot; (сaballerial) means any frontside snowboarder's spin without performing a stance (regardless a half-turns number).<br /> <br /> Spins are &quot;corked&quot; when the axis of the spin allows for the snowboarder to be oriented sideways or upside-down in the air, typically without becoming completely inverted (though the head and shoulders should drop below the relative position of the board).<br /> <br /> <br /> * '''Flip'''<br /> Flip is a rotation around the horizontal axis, i.e. over the head. There are front flip, back flip and Lincoln Loop (side flip for skiers).<br /> <br /> It is also important not only to perform a trick, but also to do it technically correct. Performing stunts is just a part of a job: the technique also matters a lot. So, during the world competitions abilities to keep balance, smoothness of the stunt, and, importantly, a touchdown are rated. For example, a significant number of points is removed for a touch of hand on landing.<br /> <br /> It should be noted that it's not always possible to tell the difference between the rotation types without watching a replay.<br /> <br /> <br /> &lt;gallery widths=250px heights=250px perrow = 4&gt;<br /> File: regular_goofy.jpg|Fig.1. Stances: regular and goofy<br /> <br /> File: FS_360.jpg|Fig.2. Frontside 360<br /> <br /> File: BS_360.jpg|Fig.3. Backside 360<br /> <br /> File: Cab_540.jpg|Fig.4. Cab 540<br /> <br /> File: Triple_Cork.jpg|Fig.5. Triple Cork<br /> <br /> File: Front_flip.jpg|Fig.6. Front Flip<br /> <br /> File: Back_flip.jpg|Fig.7. Back Flip<br /> &lt;/gallery&gt;<br /> <br /> == Videos of the most spectacular stunts ==<br /> <br /> {{#widget:YouTube|id=Br6ZJM01I6s}} {{#widget:YouTube|id= XATkSnCFsRU}}<br /> <br /> == Site of the project ==<br /> [http://www.alpinereplay.com A social network for skiers and snowboarders]<br /> <br /> [http://www.traceup.com Buy TRACE]<br /> <br /> == Patents ==<br /> 1. Lokshin A.M., Kuzkin V.A., Roberts-Thomson C.L. Use of gyro sensors for jump detection, U.S. Patent Application № 62/001 935, May 28, 2014.<br /> <br /> 2. Lokshin A.M., Kuzkin V.A. Systems and methods for identifying and characterizing athletic maneurs. US patent, Application № 13/932 899, 2013.<br /> <br /> 3. Lokshin A.M., Kuzkin V.A. [http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=/netahtml/PTO/srchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=20130346013.PGNR. Method and apparatus for determining sportsman jumps using fuzzy logic]. U.S. Patent Application № 13/612 470, Dec. 09, 2012. <br /> <br /> 4. Lokshin A.M., Kuzkin V.A., Dvas N.G. [[Media: US20120116716A1.pdf | Device and method of gyro sensor calibration]]. US patent, Application № 13/291 844, 2011.<br /> <br /> == Ссылки ==<br /> * [http://www.si.com/edge/2015/01/28/tech-talk-trace-go-pro-video-data-visualization Tech Talk: Trace offers unique data visualization for action sports video ]<br /> * [http://www.kickstarter.com/projects/activereplay/trace-the-most-advanced-activity-monitor-for-actio Project on kickstarter.com]<br /> * [http://en.wikipedia.org/wiki/List_of_snowboard_tricks Description of basic snowboarders' stunts ]<br /> * [http://skateboardingtrickslist.com Description of basic skiers' stunts]<br /> * [http://tm.spbstu.ru/Skateboarding_tricks Snowboarders' stunts in slow motion (1000 fps)]</div> 188.243.39.146 http://tm.spbstu.ru/?title=AlpineReplay&diff=8954 AlpineReplay 2017-01-18T14:51:25Z <p>188.243.39.146: </p> <hr /> <div>{{DISPLAYTITLE:&lt;span style=&quot;display:none&quot;&gt;{{FULLPAGENAME}}&lt;/span&gt;}}<br /> &lt;font size=&quot;5&quot;&gt; AlpineReplay&lt;/font&gt;<br /> [[File:Sticker AlpineReplay.png|300px|thumb|right]]<br /> <br /> == About ==<br /> <br /> The project was started in 2010 at the initiative of [http://www.linkedin.com/pub/anatole-lokshin/3/434/468 Anatoly Lokshin], CEO of AlpineReplay ltd. The project involves AlpineReplay ltd., HORIS ltd. and [[Main Page|Department &quot;Theoreticla Mechanics&quot;]] SPbPU. The main objective of the project is to create a mobile application for the skiers and snowboarders, allowing to log their detailed stats: track, speed, a number of jumps, stunt parameters, air time, a number of calories spent and much more.<br /> <br /> [[File:AlpineReplay_geography_eng.jpg|700px|thumb|center| Over 200 000 people all over the world use AlpineReplay app.]]<br /> <br /> == Areas of research == <br /> [[File:Snowboarder.jpg|250px|thumb|right|Object of research]]<br /> Employees and students of [[Main Page|Department &quot;Theoretical Mechanics&quot;]] conduct research within &quot;AlpineReplay&quot; project in the following directions:<br /> <br /> * development of the jump detection algorithm based on the fuzzy logic (MATLAB and C++)<br /> * identification of a rotation angle in a jump<br /> * development of a gyroscope calibration algorithm<br /> <br /> == Demonstration ==<br /> <br /> {{#widget:YouTube|id=fp76F6p-2g0}} {{#widget:YouTube| id=9TQG18lMxsc}} {{#widget:YouTube| id=IijLC9R-xRI}}<br /> <br /> == Download AlpineReplay application ==<br /> <br /> You can download AlpineReplay application using the following liks:<br /> <br /> * [https://play.google.com/store/apps/details?id=com.alpinereplay.android&amp;feature=search_result Android version]<br /> <br /> * [https://itunes.apple.com/us/app/alpinereplay-ski-snowboard/id457396498?mt=8 iPhone version]<br /> <br /> <br /> == Basic stunts of skiers and snowboarders ==<br /> <br /> * '''Spin'''<br /> Spins, as a rule, are done a frontside or backside, a snowboarder rotates 180° degrees clockwise/counterclockwise depending on the nature of the obstacle. Terms &quot;frontside&quot; and &quot;backside&quot; are used to describe snowboarder's spinning direction. &quot;Frontside&quot; indicates that a snowboarder in the goofy stance rotates clockwise, and in the regular stance, counterclockwise. &quot;Backside&quot; clockwise rotation is typical for the regular stance and the counterclockwise rotation is typical for the goofy stance.<br /> <br /> Term &quot;Cab&quot; (сaballerial) means any frontside snowboarder's spin without performing a stance (regardless a half-turns number).<br /> <br /> Spins are &quot;corked&quot; when the axis of the spin allows for the snowboarder to be oriented sideways or upside-down in the air, typically without becoming completely inverted (though the head and shoulders should drop below the relative position of the board).<br /> <br /> <br /> * '''Flip'''<br /> Flip is a rotation around the horizontal axis, i.e. over the head. There are front flip, back flip and Lincoln Loop (side flip for skiers).<br /> <br /> It is also important not only to perform a trick, but also to do it technically correct. Performing stunts is just a part of a job: the technique also matters a lot. So, during the world competitions abilities to keep balance, smoothness of the stunt, and, importantly, a touchdown are rated. For example, a significant number of points is removed for a touch of hand on landing.<br /> <br /> It should be noted that it's not always possible to tell the difference between the rotation types without watching a replay.<br /> <br /> <br /> &lt;gallery widths=250px heights=250px perrow = 4&gt;<br /> File: regular_goofy.jpg|Fig.1. Stances: regular and goofy<br /> <br /> File: FS_360.jpg|Fig.2. Frontside 360<br /> <br /> File: BS_360.jpg|Fig.3. Backside 360<br /> <br /> File: Cab_540.jpg|Fig.4. Cab 540<br /> <br /> File: Triple_Cork.jpg|Fig.5. Triple Cork<br /> <br /> File: Front_flip.jpg|Fig.6. Front Flip<br /> <br /> File: Back_flip.jpg|Fig.7. Back Flip<br /> &lt;/gallery&gt;<br /> <br /> == Videos of the most spectacular stunts ==<br /> <br /> {{#widget:YouTube|id=Br6ZJM01I6s}} {{#widget:YouTube|id= XATkSnCFsRU}}<br /> <br /> == Site of the project ==<br /> [http://www.alpinereplay.com A social network for skiers and snowboarders]<br /> <br /> [http://www.traceup.com Buy TRACE]<br /> <br /> == Patents ==<br /> 1. Lokshin A.M., Kuzkin V.A., Roberts-Thomson C.L. Use of gyro sensors for jump detection, U.S. Patent Application № 62/001 935, May 28, 2014.<br /> <br /> 2. Lokshin A.M., Kuzkin V.A. Systems and methods for identifying and characterizing athletic maneurs. US patent, Application № 13/932 899, 2013.<br /> <br /> 3. Lokshin A.M., Kuzkin V.A. [http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=/netahtml/PTO/srchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=20130346013.PGNR. Method and apparatus for determining sportsman jumps using fuzzy logic]. U.S. Patent Application № 13/612 470, Dec. 09, 2012. <br /> <br /> 4. Lokshin A.M., Kuzkin V.A., Dvas N.G. [[Media: US20120116716A1.pdf | Device and method of gyro sensor calibration]]. US patent, Application № 13/291 844, 2011.<br /> <br /> == Ссылки ==<br /> * [http://www.si.com/edge/2015/01/28/tech-talk-trace-go-pro-video-data-visualization Tech Talk: Trace offers unique data visualization for action sports video ]<br /> * [http://www.kickstarter.com/projects/activereplay/trace-the-most-advanced-activity-monitor-for-actio Project on kickstarter.com]<br /> * [http://en.wikipedia.org/wiki/List_of_snowboard_tricks Description of basic snowboarders' stunts ]<br /> * [http://skateboardingtrickslist.com Description of basic skiers' stunts]<br /> * [http://tm.spbstu.ru/Skateboarding_tricks Snowboarders' stunts in slow motion (1000 fps)]</div> 188.243.39.146 http://tm.spbstu.ru/?title=AlpineReplay&diff=8953 AlpineReplay 2017-01-18T14:47:04Z <p>188.243.39.146: </p> <hr /> <div>{{DISPLAYTITLE:&lt;span style=&quot;display:none&quot;&gt;{{FULLPAGENAME}}&lt;/span&gt;}}<br /> [[ru:AlpineReplay]]<br /> &lt;font size=&quot;5&quot;&gt; AlpineReplay&lt;/font&gt;<br /> [[File:Sticker AlpineReplay.png|300px|thumb|right]]<br /> <br /> == About ==<br /> <br /> The project was started in 2010 at the initiative of [http://www.linkedin.com/pub/anatole-lokshin/3/434/468 Anatoly Lokshin], CEO of AlpineReplay ltd. The project involves AlpineReplay ltd., HORIS ltd. and [[Main Page|Department &quot;Theoreticla Mechanics&quot;]] SPbPU. The main objective of the project is to create a mobile application for the skiers and snowboarders, allowing to log their detailed stats: track, speed, a number of jumps, stunt parameters, air time, a number of calories spent and much more.<br /> <br /> [[File:AlpineReplay_geography_eng.jpg|700px|thumb|center| Over 200 000 people all over the world use AlpineReplay app.]]<br /> <br /> == Areas of research == <br /> [[File:Snowboarder.jpg|250px|thumb|right|Object of research]]<br /> Employees and students of [[Main Page|Department &quot;Theoretical Mechanics&quot;]] conduct research within &quot;AlpineReplay&quot; project in the following directions:<br /> <br /> * development of the jump detection algorithm based on the fuzzy logic (MATLAB and C++)<br /> * identification of a rotation angle in a jump<br /> * development of a gyroscope calibration algorithm<br /> <br /> == Demonstration ==<br /> <br /> {{#widget:YouTube|id=fp76F6p-2g0}} {{#widget:YouTube| id=9TQG18lMxsc}} {{#widget:YouTube| id=IijLC9R-xRI}}<br /> <br /> == Download AlpineReplay application ==<br /> <br /> You can download AlpineReplay application using the following liks:<br /> <br /> * [https://play.google.com/store/apps/details?id=com.alpinereplay.android&amp;feature=search_result Android version]<br /> <br /> * [https://itunes.apple.com/us/app/alpinereplay-ski-snowboard/id457396498?mt=8 iPhone version]<br /> <br /> <br /> == Basic stunts of skiers and snowboarders ==<br /> <br /> * '''Spin'''<br /> Spins, as a rule, are done a frontside or backside, a snowboarder rotates 180° degrees clockwise/counterclockwise depending on the nature of the obstacle. Terms &quot;frontside&quot; and &quot;backside&quot; are used to describe snowboarder's spinning direction. &quot;Frontside&quot; indicates that a snowboarder in the goofy stance rotates clockwise, and in the regular stance, counterclockwise. &quot;Backside&quot; clockwise rotation is typical for the regular stance and the counterclockwise rotation is typical for the goofy stance.<br /> <br /> Term &quot;Cab&quot; (сaballerial) means any frontside snowboarder's spin without performing a stance (regardless a half-turns number).<br /> <br /> Spins are &quot;corked&quot; when the axis of the spin allows for the snowboarder to be oriented sideways or upside-down in the air, typically without becoming completely inverted (though the head and shoulders should drop below the relative position of the board).<br /> <br /> <br /> * '''Flip'''<br /> Flip is a rotation around the horizontal axis, i.e. over the head. There are front flip, back flip and Lincoln Loop (side flip for skiers).<br /> <br /> It is also important not only to perform a trick, but also to do it technically correct. Performing stunts is just a part of a job: the technique also matters a lot. So, during the world competitions abilities to keep balance, smoothness of the stunt, and, importantly, a touchdown are rated. For example, a significant number of points is removed for a touch of hand on landing.<br /> <br /> It should be noted that it's not always possible to tell the difference between the rotation types without watching a replay.<br /> <br /> <br /> &lt;gallery widths=250px heights=250px perrow = 4&gt;<br /> File: regular_goofy.jpg|Fig.1. Stances: regular and goofy<br /> <br /> File: FS_360.jpg|Fig.2. Frontside 360<br /> <br /> File: BS_360.jpg|Fig.3. Backside 360<br /> <br /> File: Cab_540.jpg|Fig.4. Cab 540<br /> <br /> File: Triple_Cork.jpg|Fig.5. Triple Cork<br /> <br /> File: Front_flip.jpg|Fig.6. Front Flip<br /> <br /> File: Back_flip.jpg|Fig.7. Back Flip<br /> &lt;/gallery&gt;<br /> <br /> == Videos of the most spectacular stunts ==<br /> <br /> {{#widget:YouTube|id=Br6ZJM01I6s}} {{#widget:YouTube|id= XATkSnCFsRU}}<br /> <br /> == Site of the project ==<br /> [http://www.alpinereplay.com A social network for skiers and snowboarders]<br /> <br /> [http://www.traceup.com Buy TRACE]<br /> <br /> == Patents ==<br /> 1. Lokshin A.M., Kuzkin V.A., Roberts-Thomson C.L. Use of gyro sensors for jump detection, U.S. Patent Application № 62/001 935, May 28, 2014.<br /> <br /> 2. Lokshin A.M., Kuzkin V.A. Systems and methods for identifying and characterizing athletic maneurs. US patent, Application № 13/932 899, 2013.<br /> <br /> 3. Lokshin A.M., Kuzkin V.A. [http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=/netahtml/PTO/srchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=20130346013.PGNR. Method and apparatus for determining sportsman jumps using fuzzy logic]. U.S. Patent Application № 13/612 470, Dec. 09, 2012. <br /> <br /> 4. Lokshin A.M., Kuzkin V.A., Dvas N.G. [[Media: US20120116716A1.pdf | Device and method of gyro sensor calibration]]. US patent, Application № 13/291 844, 2011.<br /> <br /> == Ссылки ==<br /> * [http://www.si.com/edge/2015/01/28/tech-talk-trace-go-pro-video-data-visualization Tech Talk: Trace offers unique data visualization for action sports video ]<br /> * [http://www.kickstarter.com/projects/activereplay/trace-the-most-advanced-activity-monitor-for-actio Project on kickstarter.com]<br /> * [http://en.wikipedia.org/wiki/List_of_snowboard_tricks Description of basic snowboarders' stunts ]<br /> * [http://skateboardingtrickslist.com Description of basic skiers' stunts]<br /> * [http://tm.spbstu.ru/Skateboarding_tricks Snowboarders' stunts in slow motion (1000 fps)]</div> 188.243.39.146