IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Колебание точки вдоль отрезка, Графика
R@f
сообщение 14.12.2005 18:35
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Доброго времени суток! Нужна подсказка по проге: «Изобразить на экране гармонические колебания точки вдоль некоторого горизонтального отрезка. Если длина отрезка равна С, то расстояние от левого конца до точки С (1+coswt)/2, где w – некоторая постоянная. Предусмотреть возможность управления частотой колебаний w при помощи клавиш.»
Вот код:
Код

uses Crt, Graph;
var  Drv, Md, x0, x: integer;  c, w, t, m1: real;  cs, ws: string; q: char;
function vvod(xnps: integer; ynps: integer; b:integer): real;
     var j: string;  a: real;  Code: integer;
     begin
          repeat
              gotoxy(xnps,ynps);
              writeln('                             ');
              gotoxy(1,ynps+1);
              writeln('                             ');
              gotoxy(xnps,ynps);
              readln(j);
              val(j,a,Code);
              if Code <> 0 then begin Writeln('Вводите цифры!'); readkey end;
          until (a <= b)and(a > 0);
          vvod := a
     end;
begin
     clrscr;
     gotoxy(1,4); write('Введите C => '); c := vvod(15, 4, 640);
     gotoxy(1,6); write('Введите w => '); w := vvod(15, 6, 640);
     DetectGraph(Drv, Md);  
     InitGraph(Drv, Md, 'c:\bp\bgi');
     m1 := GetMaxX/c;
     OutTextxy(1,3,'Ghange w - key arrowUp and arrowDn.');
     str(Round(c),cs);
     OutTextxy(1,20,'C = '); OutTextxy(40,20,cs);
     OutTextxy(80,20,'w = ');
     OutTextxy(10,450,'For EXIT press Esc.');

     x0 := round((GetMaxX-c)/2);
     t := 0;
     repeat
           q := #0;
           str(Round(w),ws);
           SetColor(11);
           OutTextxy(120,20,ws);
           if keypressed then
              begin
                   SetColor(0);
                   OutTextxy(120,20,ws);
                   q := readkey;
                   case q of
                         #080: w := w*0.9;
                         #072: w := w*1.1;
                   end;
                   str(Round(w),ws);
                   SetColor(11);
                   OutTextxy(120,20,ws);
               end;
               x0 := round((GetMaxX-c)/2);
               SetColor(9);
               line(0, 200,GetMaxX, 200);
               x := Round(C*m1*(1+cos(w*t))/2);
               PutPixel(x,220, white);
               Delay(9000);
               SetColor(0); line(0, 220,GetMaxX, 220);
                t := t + 2*pi/500;
     until q = #27;
     CloseGraph;
end.

Единственное, что надо - изобразить вдоль какого-то отрезка С. А я пока могу только вдоль экрана, слева-направа. Подскажите, что надо добавить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 14.12.2005 18:54
Сообщение #2


Гость






Цитата
изобразить вдоль какого-то отрезка
Смасштабируй...
x := Round(C*m1*(1+cos(w*t))/2);
замени на
x := start + Round( (C*m1*(1+cos(w*t))/2)*((finish-start)/getmaxx) );

где start - координата Х начала отрезка, finish - координата Х конца отрезка ...
 К началу страницы 
+ Ответить 
R@f
сообщение 14.12.2005 19:12
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Volvo! Спасибо дружище! Всё ОК! Я сделал отрезок С с координатами (0,С). Вот еще думаю, хорошо бы было, чтобы этот отрезок длиною С изображался линией на экране, вместо (9-ой снизу строки)
Код
line(0, 200,GetMaxX, 200);

Но если вместо GetMaxX ставишь С, он ругается. Как С в число преобразовать? Через val, что ли?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2005 19:15
Сообщение #4


Гость






С у тебя Real, для Line требуется целое число... Round "спасет отца русской демократии!" blum.gif
 К началу страницы 
+ Ответить 
R@f
сообщение 14.12.2005 19:29
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Точно, спасёт! Я забил
Код
xc:=Round(c)

Еще раз спасибо! Удачи!

Сообщение отредактировано: R@f - 14.12.2005 19:31
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"