Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Моделирование колебаний математического маятника на языке программирования Java

Курсовая Купить готовую Узнать стоимостьмоей работы

В классе PendulumFrame имеется переменная, хранящая поток для отрисовки текущего положения маятника во время его движения: private Thread pendulumThread = null;Здесь также имеется переменная типаboolean, показывающая запущен в данный момент поток движения маятника или же нет: boolean running = false;Конструктор класса PendulumFrame имеет вид: public PendulumFrame () {setDoubleBuffered (true);if… Читать ещё >

Содержание

  • ВВЕДЕНИЕ
  • 1. ОБ ОБЪЕКТНО — ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ НА JAVA
    • 1. 1. Классы, входящие в JAVA DEVELOPMENT KIT
      • 1. 1. 1. Числовые классы оболочки и класс Character
      • 1. 1. 2. Классы BigInteger и BigDecimal
      • 1. 1. 3. Работа со строками. Классы String и StringTokenizer
      • 1. 1. 4. Классы-коллекции Vector и Stack
    • 1. 2. Создание графического интерфейса пользователя и апплетов
      • 1. 2. 1. Графические примитивы и шрифты
      • 1. 2. 2. Основные компоненты графического интерфейса
      • 1. 2. 3. Размещение компонентов графического интерфейса
      • 1. 2. 4. Обработка событий
      • 1. 2. 5. Создание меню
      • 1. 2. 6. Создание апплетов
    • 1. 3. Объектно-ориентированный анализ
      • 1. 3. 1. Алгоритмическая декомпозиция и объектно-ориентированная декомпозиция
      • 1. 3. 2. Иерархия классов
      • 1. 3. 3. Агрегация классов
  • 2. ПОСТАНОВКА ЗАДАЧИ
  • 3. РЕШЕНИЕ ЗАДАЧИ
  • 4. ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ДЕКОМПОЗИЦИЯ КЛАССОВ
  • ЗАКЛЮЧЕНИЕ
  • БИБЛИОГРАФИЧЕСКИЙ
  • СПИСОК
  • ПРИЛОЖЕНИЯ
  • Приложение 1. Листинг программы
  • Приложение 2. Скриншот работающей программы

Моделирование колебаний математического маятника на языке программирования Java (реферат, курсовая, диплом, контрольная)

length=length;}В классе Pendulum имеется два гэттера и два сэттера для переменных класса: publicdouble getAngle () {return angle;}publicvoid setAngle (double angle) {this.angle = angle;}publicdouble getLength () {return length;}publicvoid setLength (double length) {this.length = length;}Далее был создан класс PendulumFrame, реализующий графический интерфейс приложения: publicclass PendulumFrame extends JPanel implements Runnable {В классе PendulumFrame имеется переменная-контейнер для группировки компонент интерфейса: private JFrame f = new JFrame («Pendulum»);Также в этом классе имеется переменная для хранения модели математического маятника. По умолчанию это маятник длиной 300 и углом отклонения от положения равновесия 0 градусов: private Pendulum pendulum=new Pendulum (0.0,300.

0);В классе PendulumFrame имеется переменная, хранящая поток для отрисовки текущего положения маятника во время его движения: private Thread pendulumThread = null;Здесь также имеется переменная типаboolean, показывающая запущен в данный момент поток движения маятника или же нет: boolean running = false;Конструктор класса PendulumFrame имеет вид: public PendulumFrame () {setDoubleBuffered (true);if (pendulumThread == null) {pendulumThread = new Thread (this); }}В классе PendulumFrame имеется метод для определения предпочтительных размеров JPanel в зависимости от длины маятника: public Dimension getPreferredSize () {returnnew Dimension (2 * ((int)(pendulum.getLength ()))+ 50, (int)(pendulum.getLength ()) / 2 * 3); }В этом классе также имеется метод для рисования математического маятника с заданной длиной и углом отклонения от положения равновесия: publicvoid paint (Graphics g) {g.setColor (Color.WHITE);g.fillRect (0, 0, getWidth (), getHeight ());g.setColor (Color.BLACK);int anchorX = getWidth () / 2, anchorY = getHeight () / 4;int ballX = anchorX + (int) (Math.sin (pendulum.getAngle ()) * pendulum. getLength ());int ballY = anchorY + (int) (Math.cos (pendulum.getAngle ()) * pendulum. getLength ());g.drawLine (anchorX, anchorY, ballX, ballY);g.fillOval (anchorX — 3, anchorY — 4, 7, 7);g.fillOval (ballX — 7, ballY — 7, 14, 14); }Также в классе PendulumFrameпредставлен метод для рисования движения математического маятника: publicvoid run () {double angleAccel, angleVelocity = 0, dt = 0.1;while (running) {angleAccel = -9.81 / pendulum. getLength () * Math. sin (pendulum.getAngle ());angleVelocity += angleAccel * dt;pendulum.setAngle (pendulum.getAngle ()+ angleVelocity * dt);repaint ();try { pendulumThread. sleep (15); } catch (InterruptedException ex) { } } }В методе main () класса PendulumFrame добавляются компоненты в контейнер JFrame f. Здесь реализован графический интерфейс приложения, позволяющий пользователю задавать длину математического маятника и угол его отклонения от положения равновесия, а также наблюдать за движением заданного маятника на экране своего монитора: publicstaticvoid main (String[] args) { PendulumFrame p = new PendulumFrame (); Toolkit kit=Toolkit.getDefaultToolkit (); Dimension d=kit.getScreenSize ();p.f.setSize (d); // кнопканачаладвижениямаятника JButton start = newJButton («Start»); // кнопкаостановкидвижениямаятника JButton exit = newJButton («Exit»); //поледлявводадлинымаятника JTextField lengthField = newJTextField (); //поледлявводауглаотклонениямаятникаотположенияравновесия JTextField angleField = newJTextField (); JPanel panel=newJPanel ();panel.setLayout (new GridLayout (3,2)); Font font=newFont («SansSerif», Font. BOLD, 14); JLabel labelLenght=newJLabel («Введите длину маятника»);labelLenght.setFont (font);panel.add (labelLenght);lengthField.getDocument ().addDocumentListener (p.new fieldDocumentListener (lengthField, angleField));panel.add (lengthField); JLabel labelAngle=newJLabel («Введите угол отклонения маятника в градусах»);labelAngle.setFont (font);panel.add (labelAngle);angleField.getDocument ().addDocumentListener (p.new fieldDocumentListener (lengthField, angleField));panel.add (angleField);start.addActionListener (p.new buttonStartListener (lengthField, angleField));exit.addActionListener (p.new buttonStopListener ());panel.add (start);panel.add (exit);p.f.setLayout (new GridBagLayout ()); GridBagConstraints c = newGridBagConstraints ();c.fill = GridBagConstraints. HORIZONTAL;c.gridx = 0;c.gridy = 0;p.f.add (panel, c);c.fill = GridBagConstraints. HORIZONTAL;c.gridx = 0;c.gridy = 1;p.f.add (p, c);p.f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);p.f.pack ();p.f.setVisible (true); }В классе PendulumFrame имеются три внутренних класса-слушателя событий нажатия кнопок приложения пользователем, а также изменения текста полей ввода JTextField. Класс buttonStartListener реагирует на нажатие пользователем приложения кнопки «Start» тем, что запускает рисование движения математического маятника: privateclass buttonStartListener implements ActionListener {JTextField tf1;JTextField tf2;buttonStartListener (JTextField lengthField, JTextField angleField){this.tf1=lengthField;this.tf2=angleField;}@Overridepublicvoid actionPerformed (ActionEvent e) {running = true;if (pendulumThread.getState ().equals (State.NEW)){pendulumThread.start (); }tf1.setEditable (false);tf2.setEditable (false);} }Класс-слушательbuttonStopListenerреагирует на нажатие кнопки «Exit» тем, что останавливает поток рисования движения маятника и закрывает приложение: privateclassbuttonStopListenerimplements ActionListener {publicvoid actionPerformed (ActionEvent e) {// остановкапотокаrunning = false; f. dispose ();} }Класс-слушатель сохраняет информацию о длине маятника и угле его отклонения от положения равновесия, введенную пользователем в поля ввода JTextField, в переменную Pendulum pendulum: privateclassfieldDocumentListenerimplements DocumentListener {JTextField tf1;JTextField tf2;fieldDocumentListener (JTextField lengthField, JTextField angleField){this.tf1=lengthField;this.tf2=angleField;}@Overridepublicvoid changedUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}@Overridepublicvoid insertUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}@Overridepublicvoid removeUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}publicvoid changeLength (){if ((!tf1.getText ().equals (««))&&(tf1.getText ()≠null)){pendulum.setLength (Double.parseDouble (tf1.getText ()));}}publicvoid changeAngle (){if ((!tf2.getText ().equals (««))&&(tf2.getText ()≠null)){pendulum.setAngle (Double.parseDouble (tf2.getText ())*Math.PI/180); }}}4. ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ДЕКОМПОЗИЦИЯ КЛАССОВВ IDE Eclipse с помощью программы ObjectAid UML Explorer была получена UML — диаграмма классов разработанного приложения (рис. 4).Рисунок 4. UML — диаграмма классов приложения «Математический маятник"ЗАКЛЮЧЕНИЕВ представленном курсовом проекте были рассмотрены основные понятия языка программирования Java, принципы создания графических приложений на этом языке, представлены основные особенности объектно-ориентированного программирования на языке Java. В результате выполнения данного курсового проекта была создана интерактивная программа, позволяющую пользователю смоделировать движения математического маятника, зная его длину и отклонение от положения равновесия.

Потенциальное применение программы очень широко — от непосредственно учебных целей до использования ее в научно-исследовательских разработках по физике. БИБЛИОГРАФИЧЕСКИЙ СПИСОКВасильев А.Н. Java: Объектно-ориентированное программирование, — Санкт-Петербург, Питер, 2011. — 396 с. Васильев А. Н. Самоучитель Java с примерами и программами- СПб.: Изд-во Наука и техника, 2011. -

350 с. Капор М. Ява для всех. — Санкт-Петербург, 1997. — 200 с. Мильвидский А. М.

Введение

в Java.

— 1998. — 250 с. Чанцев В. П. Объектно-ориентированное программирование на Java: практикум / В. П. Чанцев. — СПб.: Изд-во Политехн. ун-та, 2011.-76с.Хорстманн К. С., Корнелл Г.

J ava. Библиотека профессионала. Том 1. Расширенные средства, 9-е изд.: Пер.

с англ. — М.: ООО «И.Д. Вильямс», 2014. — 864 с. Хорстманн К. С., Корнелл Г. J ava. Библиотека профессионала. Том 2.

Расширенные средства, 9-е изд.: Пер. с англ. — М.: ООО «И.Д. Вильямс», 2014. — 1008 c. Эккель Б. Философия Java.

Библиотека программиста.

4-е изд.: Пер. с англ. — Санкт-Петербург, Питер, 2015. — 1168 с. Tsai, J. and Ridge, J. N ovember 1988.

I ntelligent Support for Specifications Transformation. IEEE S oftware vol.5(6), p. 34. ПРИЛОЖЕНИЯПриложение 1. Листинг программыpackage model;//класс, реализующиймодельматематическогомаятникаpublicclass Pendulum {//уголотклонениямаятникаотположенияравновесияprivatedouble angle;//длинамаятникаprivatedouble length; //конструкторклассаPendulum (){} //конструкторклассаpublic Pendulum (double angle, double length){this.angle=angle;this.length=length; } //гэттердляуглаотклонениямаятникаотположенияравновесияpublicdouble getAngle () {return angle;}//сэттердляуглаотклонениямаятникаотположенияравновесияpublicvoid setAngle (double angle) {this.angle = angle;}//гэттердлядлинымаятникаpublicdouble getLength () {return length;}//сэттердлядлинымаятникаpublicvoid setLength (double length) {this.length = length;}}package view;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.lang.Thread.State;import javax.swing.*;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import model. Pendulum;//класс, реализующийинтерфейсприложенияpublicclassPendulumFrameextends JPanel implements Runnable {//окноприложенияprivate JFrame f = new JFrame («Pendulum»);//математическиймаятникадлиной300 и угломотклоненияотположенияравновесия 0 градусовprivate Pendulum pendulum=new Pendulum (0.0,300.

0); //потокprivate Thread pendulumThread = null; //указываетпоток run илинетboolean running = false;//конструкторклассаpublic PendulumFrame () {setDoubleBuffered (true);if (pendulumThread == null) {pendulumThread = new Thread (this); } }//метод, определяющийпредпочтительныеразмеры JPanel @Overridepublic Dimension getPreferredSize () {returnnew Dimension (2 * ((int)(pendulum.getLength ()))+ 50, (int)(pendulum.getLength ()) / 2 * 3); }//методрисованиямаятника @Overridepublicvoid paint (Graphics g) {g.setColor (Color.WHITE);g.fillRect (0, 0, getWidth (), getHeight ());g.setColor (Color.BLACK);int anchorX = getWidth () / 2, anchorY = getHeight () / 4;int ballX = anchorX + (int) (Math.sin (pendulum.getAngle ()) * pendulum. getLength ());int ballY = anchorY + (int) (Math.cos (pendulum.getAngle ()) * pendulum. getLength ());g.drawLine (anchorX, anchorY, ballX, ballY);g.fillOval (anchorX — 3, anchorY — 4, 7, 7);g.fillOval (ballX — 7, ballY — 7, 14, 14); }//запускпотокарисованиядвижениямаятникаpublicvoid run () {double angleAccel, angleVelocity = 0, dt = 0.1;while (running) {angleAccel = -9.81 / pendulum. getLength () * Math. sin (pendulum.getAngle ());angleVelocity += angleAccel * dt;pendulum.setAngle (pendulum.getAngle ()+ angleVelocity * dt);repaint ();try { pendulumThread. sleep (15); } catch (InterruptedException ex) { } } }//метод mainpublicstaticvoid main (String[] args) { PendulumFrame p = new PendulumFrame (); Toolkit kit=Toolkit.getDefaultToolkit (); Dimension d=kit.getScreenSize ();p.f.setSize (d); // кнопканачаладвижениямаятника JButton start = newJButton («Start»); // кнопкаостановкидвижениямаятника JButton exit = newJButton («Exit»); //поледлявводадлинымаятника JTextField lengthField = newJTextField (); //поледлявводауглаотклонениямаятникаотположенияравновесия JTextField angleField = newJTextField (); JPanel panel=newJPanel ();panel.setLayout (new GridLayout (3,2)); Font font=newFont («SansSerif», Font. BOLD, 14); JLabel labelLenght=newJLabel («Введите длину маятника»);labelLenght.setFont (font);panel.add (labelLenght);lengthField.getDocument ().addDocumentListener (p.new fieldDocumentListener (lengthField, angleField));panel.add (lengthField); JLabel labelAngle=newJLabel («Введите угол отклонения маятника в градусах»);labelAngle.setFont (font);panel.add (labelAngle);angleField.getDocument ().addDocumentListener (p.new fieldDocumentListener (lengthField, angleField));panel.add (angleField);start.addActionListener (p.new buttonStartListener (lengthField, angleField));exit.addActionListener (p.new buttonStopListener ());panel.add (start);panel.add (exit);p.f.setLayout (new GridBagLayout ()); GridBagConstraints c = newGridBagConstraints ();c.fill = GridBagConstraints. HORIZONTAL;c.gridx = 0;c.gridy = 0;p.f.add (panel, c);c.fill = GridBagConstraints. HORIZONTAL;c.gridx = 0;c.gridy = 1;p.f.add (p, c);p.f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);p.f.pack ();p.f.setVisible (true); //new Thread (p).start (); }// реализацияслушателясобытия startprivateclass buttonStartListener implements ActionListener {JTextField tf1;JTextField tf2;buttonStartListener (JTextField lengthField, JTextField angleField){this.tf1=lengthField;this.tf2=angleField;}@Overridepublicvoid actionPerformed (ActionEvent e) {running = true;if (pendulumThread.getState ().equals (State.NEW)){pendulumThread.start (); }tf1.setEditable (false);tf2.setEditable (false);} }// реализацияслушателясобытия exitprivateclass buttonStopListener implements ActionListener {publicvoid actionPerformed (ActionEvent e) {// will cause thread to stop looping running = false; f. dispose ();} }//реализацияслушателясобытияизмененияполейвводадлинымаятника и углаотклонениямаятникаотположенияравновесияprivateclass fieldDocumentListener implements DocumentListener {JTextField tf1;JTextField tf2;fieldDocumentListener (JTextField lengthField, JTextField angleField){this.tf1=lengthField;this.tf2=angleField;}@Overridepublicvoid changedUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}@Overridepublicvoid insertUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}@Overridepublicvoid removeUpdate (DocumentEvent arg0) {changeLength ();changeAngle ();}publicvoid changeLength (){if ((!tf1.getText ().equals (««))&&(tf1.getText ()≠null)){pendulum.setLength (Double.parseDouble (tf1.getText ()));}}publicvoid changeAngle (){if ((!tf2.getText ().equals (««))&&(tf2.getText ()≠null)){pendulum.setAngle (Double.parseDouble (tf2.getText ())*Math.PI/180); }} }}Приложение 2. Скриншот работающей программы

Показать весь текст

Список литературы

  1. Васильев А.Н. Java: Объектно-ориентированное программирование, — Санкт-Петербург, Питер, 2011. -396 с.
  2. А.Н. Самоучитель Java с примерами и программами- СПб.: Изд-во Наука и техника, 2011. — 350 с.
  3. М. Ява для всех. — Санкт-Петербург, 1997. -200 с.
  4. А. М. Введение в Java. -1998. -250 с.
  5. В.П. Объектно-ориентированное программирование на Java: практикум / В. П. Чанцев. — СПб.: Изд-во Политехн. ун-та, 2011.-76с.
  6. К.С., Корнелл Г. Java. Библиотека профессионала. Том 1. Расширенные средства, 9-е изд.: Пер. с англ. — М.: ООО «И.Д. Вильямс», 2014. — 864 с.
  7. К.С., Корнелл Г. Java. Библиотека профессионала. Том 2. Расширенные средства, 9-е изд.: Пер. с англ. — М.: ООО «И.Д. Вильямс», 2014. — 1008 c.
  8. . Философия Java. Библиотека программиста.4-е изд.: Пер. с англ. — Санкт-Петербург, Питер, 2015. -1168 с.
  9. Tsai, J. and Ridge, J. November 1988. Intelligent Support for Specifications Transformation. IEEE Software vol.5(6), p. 34.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ