![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
![]()
На экран выведена прямая линия, которая моделирует поведение струны. Построить программу таким образом, чтобы можно было курсором и левой клавишей натянуть струну в вертикальном направлении (вверх или вниз) на произвольное расстояние. При отпускании левой клавиши, струна должна возвращатся в исходное состояние.
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
если не учитывать колебательное движение, то задача сильно упрощается.
при клике мышью определяете точку захвата, далее по координатам двух точек и уравнения прямой строите имитацию растяжения. При отпускании кнопки мыши в цикле медленно и печально всё приводите в исходное состояние. правда учтите, что "линия разлома" в данном случае будет угловатая, и для "скругления" нужна некая аппроксимация, например B-сплайнами, но я думаю для вашей лабы и так сойдет
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
![]()
#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,®,®,&sreg); } void ms_on(void) { union REGS reg; reg.x.ax=1; int86(0x33,®,®); } void ms_off(void) { union REGS reg; reg.x.ax=2; int86(0x33,®,®); } 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,®,®); } int ms_init(int*kbt) { union REGS reg; reg.x.ax=0; int86(0x33,®,®); *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,®,®); 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); } |
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
![]()
Я не знаю как делать смогла сделать только прямую с координатами. Что нежно добавить
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
Что нежно добавить
Ну я не знаю, добавляй как хочешь, хочешь нежно, хочешь - грубо, это как тебе самой больше нравится o_0 PS. Судя по int86() у тебя код под ms-dos, а значит, на современных компьютерах работать не будет. Да и найти сейчас специалистов по этой рухляди крайне сложно. так что походу ты с этой лабой попала.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
![]()
нужно) добавить в эту программу
|
![]() |
![]() |