Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2012, 14:58   #1
ЛеНуШк@
Новичок
Джуниор
 
Регистрация: 08.01.2012
Сообщений: 4
Восклицание С++

На экран выведена прямая линия, которая моделирует поведение струны. Построить программу таким образом, чтобы можно было курсором и левой клавишей натянуть струну в вертикальном направлении (вверх или вниз) на произвольное расстояние. При отпускании левой клавиши, струна должна возвращатся в исходное состояние.
Изображения
Тип файла: jpg 2011-12-20 15.50.25.jpg (62.6 Кб, 124 просмотров)
ЛеНуШк@ вне форума Ответить с цитированием
Старый 08.01.2012, 15:05   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

если не учитывать колебательное движение, то задача сильно упрощается.
при клике мышью определяете точку захвата, далее по координатам двух точек и уравнения прямой строите имитацию растяжения. При отпускании кнопки мыши в цикле медленно и печально всё приводите в исходное состояние.

правда учтите, что "линия разлома" в данном случае будет угловатая, и для "скругления" нужна некая аппроксимация, например B-сплайнами, но я думаю для вашей лабы и так сойдет
Rififi вне форума Ответить с цитированием
Старый 08.01.2012, 15:34   #3
ЛеНуШк@
Новичок
Джуниор
 
Регистрация: 08.01.2012
Сообщений: 4
По умолчанию C++

#include<dos.h>
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#include<mouse.h>

void ms_gform(int xt,int yt);
int ms_querp(MOUSE_STATE*ms, int bottom);

union REGS reg;
int graphdriver, gmode, errorcode;
int form[32]={0xFC3F,0xFC3F,0xFC3F,0xFC3F,0xFC3 F,0xFC3F,
0x0000,0x0000,0x0000,0x0000,
0xFC3F,0xFC3F,0xFC3F,0xFC3F,0xFC3F, 0xFC3F,
0x0000,0x0180,0x0180,0x0180,0x0180, 0x0180,0x0180,
0x7FFE,0x7FFE,0x0180,0x0180,0x0180, 0x0180,0x0180,0x0180,0x0000};

void ms_gform(int far *form,int xt,int yt)
{
union REGS reg;
struct SREGS sreg;
reg.x.ax=9;
reg.x.bx=xt;
reg.x.cx=yt;
reg.x.dx=FP_OFF(form);
sreg.es=FP_SEG(form);
int86x(0x33,&reg,&reg,&sreg);
}

void ms_on(void)
{
union REGS reg;
reg.x.ax=1;
int86(0x33,&reg,&reg);
}
void ms_off(void)
{
union REGS reg;
reg.x.ax=2;
int86(0x33,&reg,&reg);
}
void ms_tform(int type,int msk1,int msk2)
{
union REGS reg;
reg.x.ax=0xA;
reg.x.bx=type;
reg.x.cx=msk1;
reg.x.dx=msk2;
int86(0x33,&reg,&reg);
}

int ms_init(int*kbt)
{
union REGS reg;
reg.x.ax=0;
int86(0x33,&reg,&reg);
*kbt=reg.x.bx;
return(reg.x.ax);
}
int ms_querp(MOUSE_STATE*ms,int bottom)
{
union REGS reg;
reg.x.ax=5;
reg.x.bx=bottom;
int86(0x33,&reg,&reg);
ms->bottoms=reg.x.ax;
ms->x=reg.x.cx;
ms->y=reg.x.dx;
return(reg.x.bx);
}

main(void)
{
int botm,px,py;MOUSE_STATE state;
char s[60];
graphdriver=DETECT;
initgraph(&graphdriver,&gmode,"c:\\ BORLANDC\\BGI\\");
errorcode=graphresult();
if(errorcode!=0)
{
printf("ЋиЁЎЄ*!\n");
getch();
exit(1);
}
if(!ms_init(&botm))
{
puts("Њлим *Ґ гбв**®ў«Ґ**!");
exit(-1);
}
setfillstyle(1,4);
bar(10,10,600,480);
setcolor(15);
outtextxy(300,470,"‚›•Ћ„");
ms_on();
ms_gform(form,7,7);
while(!0)
{
if(ms_querp(&state,0)!=0)
{
px=state.x;
py=state.y;
sprintf(s,"x=%-5d y=%-5d",px,py);
line (100,200,300,200);
outtextxy(30,12,s);
if(px>300&&px<340&&py>470)goto end;
}
}
end:
cleardevice();
closegraph();
return(0);
}
ЛеНуШк@ вне форума Ответить с цитированием
Старый 08.01.2012, 15:35   #4
ЛеНуШк@
Новичок
Джуниор
 
Регистрация: 08.01.2012
Сообщений: 4
По умолчанию

Я не знаю как делать смогла сделать только прямую с координатами. Что нежно добавить
ЛеНуШк@ вне форума Ответить с цитированием
Старый 08.01.2012, 15:47   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Что нежно добавить

Ну я не знаю, добавляй как хочешь, хочешь нежно, хочешь - грубо, это как тебе самой больше нравится o_0

PS. Судя по int86() у тебя код под ms-dos, а значит, на современных компьютерах работать не будет. Да и найти сейчас специалистов по этой рухляди крайне сложно. так что походу ты с этой лабой попала.
Rififi вне форума Ответить с цитированием
Старый 08.01.2012, 20:49   #6
ЛеНуШк@
Новичок
Джуниор
 
Регистрация: 08.01.2012
Сообщений: 4
По умолчанию

нужно) добавить в эту программу
ЛеНуШк@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц