Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 50

Организовать движение маятника

11.12.2012, 23:27. Показов 4354. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть картинка
нужно организовать движение маятника
как поворачивать картинку относительно верхней середины картинки
или как поворачивать картинку , чтобы хотя бы одна точка была неподвижна
заранее благодарен)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2012, 23:27
Ответы с готовыми решениями:

Скрипт маятника
Задача вероятно простая, но я не могу ее решить... Я лазил по интернету и нашел много интересного, но в итоге что-то не работает, а...

движение маятника
var Form1: TForm1; n:real; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var R: integer; ...

Движение математического маятника
Всем привет. Нужно срочно написать программу движения математического маятника на C#. Отклонение примерно сделать градусов в 45. Вот то...

6
 Аватар для JsLoveR
425 / 167 / 48
Регистрация: 05.12.2012
Сообщений: 855
12.12.2012, 23:47
Michanya, для примера:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function getId(id){return document.getElementById(id)}
 
var canvas = null, ctx = null, img = null, count = 0, v = 1, currAngle = 0, f = false ;
var angleMin = 45;
var angleMax = 135;
 
function drawStatic() {
    canvas = getId("pendulum");
    ctx = canvas.getContext("2d");
    img = new Image(); 
    img.src = 'https://www.cyberforum.ru/images/cyberforum_logo.jpg';
    ctx.drawImage(img, canvas.width/2, canvas.height/2);
}
 
function movePendulum() {
    setInterval(function () {
        setTransform(ctx, img);
    }, 80);
} 
 
function setTransform(ctx, img) {
    currAngle = angleMin + (angleMax - angleMin)*(count / 10);
    if (currAngle < angleMin ){
        v = 1;
    }
 
    if (currAngle > angleMax){
        v = -1;
    }
    count += 1 * v;
    ctx.clearRect (0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(canvas.width/2, canvas.height/2);
    ctx.rotate(-currAngle * Math.PI/180);
    ctx.drawImage(img, -img.width, -img.height/2);
    ctx.restore ();
}
 
window.onload = function() {
    drawStatic();
    movePendulum();
}
 
</script>
</head>
 
<body>
<canvas id="pendulum" width="500" height="500"></canvas>
</body>
</html>
1
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 50
13.12.2012, 22:54  [ТС]
JsLoveR, а не могли бы рассказать почему такая формула?
JavaScript
1
currAngle = angleMin + (angleMax - angleMin)*(count / 10);
0
 Аватар для JsLoveR
425 / 167 / 48
Регистрация: 05.12.2012
Сообщений: 855
14.12.2012, 08:44
Michanya, это начальное положение маятника + импульс движения маятника(некоторое приращение, попросту скорость) равносильно этому currAngle = angleMin + count * 9. Ничего хитрого)
0
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 50
17.12.2012, 14:14  [ТС]
JsLoveR, а как придать физику, то есть чтобы он не равномерно поворачивался....а с ускорением?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
17.12.2012, 14:17
это вы напишите физическую формулу функции зависимости угла от времени
а товарищ программист вам её прикрутит
0
 Аватар для JsLoveR
425 / 167 / 48
Регистрация: 05.12.2012
Сообщений: 855
18.12.2012, 18:21
Michanya, вот, держи, небольшой примитивный скриптик, есть небольшие огрехи с погашением колебания, доделаешь сам, так как я пока не дома, приду - может исправлю:
CSS
1
2
3
4
*{ padding:0; margin:0}
canvas{ margin:5px; border:1px solid #999999; float:left;}
.mTop{ margin-top:5px;}
.infoDiv{float:left; margin-left:10px;}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
function getId(id){return document.getElementById(id)}
 
var canvas = null, ctx = null, pendulum = null;
var x0 = 0, y0 = 0, x=0,y=0, len = 200, A = 0, dt = 0.02, time = 0, Tperiod = 2 * Math.PI / Math.sqrt(len/9.8), dclrt = 0, timer = null, run = false;
 
function getData(button){
    run = !run;
    if(run){
        A = parseInt(getId("A").value);
        dt = parseFloat(getId("speed").value);
        len = parseInt(getId("length").value);
        dclrt = 0;
        
        if(getId("decelerate").checked){
            dclrt = 1;
        }
        
        if(isFinite(A) && isFinite(dt)  && isFinite(len)){
            if(len > 500) {
                alert("Длина нити не должна превышать 500");
                len = 500;
                getId("length").value = len;
                run = false;
            }
            
            if(len < 30){
                alert("Длина нити слишком мала! Минимум - 30");
                len = 30;
                getId("length").value = len;
                run = false;
            }
            
            if(A > len) {
                alert("Амплитуда не может быть больше нити!");
                A = len;
                getId("A").value = A;
                run = false;
            }
            
            if(A <= 0) {
                alert("Амплитуда не может быть меньше 1!");
                A = 1;
                getId("A").value = A;
                run = false;
            }
            
            if(dt > 0.2) {
                alert("Шаг во времени слишком большой! Максимум - 0.2");
                dt = Math.random() * 0.2;
                getId("speed").value = dt.toFixed(4);
                run = false;
            }
            
            if(run) {
                movePendulum();
                button.value = "Остановить";
                
            }
        }
        else {
            alert("Введите число!");
            run = false;
        }
    }
    else {
        button.value = "Запустить";
        
    }
}
 
function drawElements() {
    canvas = getId("pendulum");
    ctx = canvas.getContext("2d");
    x0 = canvas.width/2;
    y0 = canvas.height/2;
    line(x0, y0-len, x0, y0, "#555");   
    pendulum = new createPendulum(x0, y0, 10);
    pendulum.draw();
}
 
function createPendulum(x, y, R){
    this.x = x;
    this.y = y;
    this.R = R;
    
    this.draw = function(color){
        var grad = ctx.createRadialGradient(this.x, this.y, this.R, this.x - 2, this.y-4, 2);
        grad.addColorStop(0, '#333'); 
        grad.addColorStop(1, '#999');
         
        ctx.fillStyle = grad;
        ctx.beginPath();
        ctx.arc(this.x , this.y , this.R, 0, Math.PI * 2, true);
        ctx.fill();
    }
}
 
function movePendulum() {
    timer = setInterval(function () {
        impulsePendulum();
    }, 80);
} 
 
function impulsePendulum() {
    
    ctx.clearRect (0, 0, canvas.width, canvas.height);
    time = time + dt;
    x = A * Math.sin(time/Tperiod * 2* Math.PI) * Math.pow(2.71, -0.1 * time * dclrt);
    y = Math.sqrt(len*len - x*x) - len;
    line(x0, y0 - len, x + x0, y + y0, "#555"); 
    pendulum.x = x + x0;
    pendulum.y = y + y0;
    pendulum.draw();
}
 
function line(x0, y0, x, y, color){
    ctx.beginPath();
    ctx.strokeStyle = color;
    ctx.moveTo(x0,y0);
    ctx.lineTo(x,y);
    ctx.closePath();
    ctx.stroke();
}
 
window.onload = function() {
    drawElements();
}
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<canvas id="pendulum" width="500" height="500"></canvas>
<div class="infoDiv">
    <p>Амплитуда: </p>
    <input type="text" id="A" size="9" value="80" />
    <p class="mTop">Скорость: </p>
    <input type="text" id="speed" size="9" value="0.03" />
    <p class="mTop">Длина нити: </p>
    <input type="text" id="length" size="9" value="200" />
    <p class="mTop"><label><input type="checkbox" id="decelerate" /> Использовать погашение колебания</label></p>
    <br/>
    <p class="mTop"><input type="button" value="Запустить" onclick="clearInterval(timer); getData(this); " /></p>
</div>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2012, 18:21
Помогаю со студенческими работами здесь

Движение маятника в Borland 3.1
Написать программу имитирующую движение(без затухания) маятника. Помогите пожалуйста,не могу разобраться.

Движение маятника с затухающими колебаниями
Помогите сделать лабораторную! Как реализовать колебания нити маятника с затуханием движения #define WIN32_LEAN_AND_MEAN #include...

Как показать движение маятника?
как в пикчер боксе или в другом элементе показать движение маятника??? тоесть после запкска программы будет показан &quot;висячий&quot;...

Движение математического маятника в отклонении
Написать анимационную программу 1)движение колокольчика 2)движение математического маятника в отклонении Добавлено через 1 час 25...

Организовать движение звезд
Составить программы для предложенных заданий с использованием модулей, отладить их и сохранить. 1. Разбить программу на части. 2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru