|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.04.2007, 13:11 | #1 |
Регистрация: 08.04.2007
Сообщений: 6
|
Помогите описать функцию
Помощь нужне не по Delphi а по математике. СРОЧНО
есть описание рисования квадрата: MoveToEx(DC,round(x-r/2),round(y-r/2),0); LineTo(dc,round(x+r/2),round(y-r/2)); MoveToEx(DC,round(x-r/2),round(y-r/2),0); LineTo(dc,round(x-r/2),round(y++r/2)); MoveToEx(DC,round(x+r/2),round(y-r/2),0); LineTo(dc,round(x+r/2),round(y+r/2)); MoveToEx(DC,round(x-r/2),round(y+r/2),0); LineTo(dc,round(x+r/2),round(y+r/2)); x, y - координаты центра. r - радиус описанной окружности. т.к. делается все в Делфи то: Х возрастает с лева на право, Y возрастает с верху вниз. Нужно: описать этот квадрат так, чтобы при изменении одной переменной он поворачивался вокруг центра, (пример a:=a+2; поворачиваем на 2 пикселя. ) наверное надо делать через sin и cos, но у меня всегда с тригонометрией было неважно P.S. зарание спасибо. |
08.04.2007, 15:22 | #2 |
Студент
Форумчанин
Регистрация: 10.11.2006
Сообщений: 196
|
Вот:
Код:
Visita Interiorem Terrae Rectificando Operae Lapidem...
Последний раз редактировалось Сильванович Михаил; 08.04.2007 в 18:25. |
09.04.2007, 22:28 | #3 |
Регистрация: 08.04.2007
Сообщений: 6
|
спасибо, вот только я переделал под свою прграмму, у меня компелируется а при прорисовке выдает ошибку, посмотрите може что не так? другие фигуры ресуются, у меня были проблемы с ArcCos, но потом подключил модуль Math, и прога стала компилироватся.
Вот часть кода (основное выделенно жирным) Код HTML:
[SIZE=1]uses[/SIZE] [SIZE=1]Windows,[/SIZE] [SIZE=1]Messages,[/SIZE] [SIZE=1]Math;[/SIZE] [SIZE=1]const max=10;[/SIZE] [SIZE=1]type[/SIZE] [SIZE=1]TFigur = record[/SIZE] [SIZE=1]x,y,r,tip,del,col,a,t,c1,c2,c3,b,d,h,x1,y1: integer;[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]var x,y,r,tip,i,j,c,del,col,a,t,c1,c2,c3,b,d,h,x1,y1: integer;[/SIZE] [SIZE=1]F: array[1..max] of TFigur;[/SIZE] [SIZE=1]n1,n2,n3,n4,n5,n6,n7,n8,n9,n0,StartU,u: real;[/SIZE] [SIZE=1]function WindowProc (HWindow: HWnd; Message: UINT;[/SIZE] [SIZE=1]WParam, LParam: Longint): Longint; stdcall;[/SIZE] [SIZE=1]const Wind1 = 'okno';[/SIZE] [SIZE=1]Windnam = 'okno1';[/SIZE] [SIZE=1]var res: integer;[/SIZE] [SIZE=1]DC: HDC;[/SIZE] [SIZE=1]ps: TPaintstruct;[/SIZE] [SIZE=1]rect: Trect;[/SIZE] [SIZE=1]pen, pen_tmp: HPEN;[/SIZE] [SIZE=1]procedure Drow(F:TFigur; DC:HDC);[/SIZE] [SIZE=1]begin[/SIZE] [SIZE=1]case F.col of[/SIZE] [SIZE=1]1: begin pen:=CreatePen(PS_SOLID, 2, RGB($b1, $b1, $b1)); // цвет неактивной фигуры[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]2: begin pen:=CreatePen(PS_SOLID, 5, RGB($00, $FF, $00)); // цвет активной не перекрашенной фигуры[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]3: begin pen:=CreatePen(PS_SOLID, 5, RGB($FF, $00, $00)); //красный цвет[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]4: begin pen:=CreatePen(PS_SOLID, 5, RGB($99, $1f, $95)); // сиреневый цвет[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]5: begin pen:=CreatePen(PS_SOLID, 5, RGB($e5, $d4, $15)); // желтый цвет[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]6: begin pen:=CreatePen(PS_SOLID, 2, RGB($FF, $00, $00)); //красный цвет неактивной фигуры[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]7: begin pen:=CreatePen(PS_SOLID, 2, RGB($99, $1f, $95)); // сиреневый цвет неактивной фигуры[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]8: begin pen:=CreatePen(PS_SOLID, 2, RGB($e5, $d4, $15)); // желтый цвет неактивной фигуры[/SIZE] [SIZE=1]pen_tmp:= SelectObject(DC, pen);[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]case F.tip of[/SIZE] [SIZE=1]1: begin[/SIZE] [SIZE=1]MoveToEx(DC, round(F.x), round(F.y+F.r), nil);[/SIZE] [SIZE=1]LineTo(DC, round(F.x+F.r), round(F.y));[/SIZE] [SIZE=1]LineTo(DC, round(F.x), round(F.y-F.r));[/SIZE] [SIZE=1]LineTo(DC, round(F.x-F.r), round(F.y));[/SIZE] [SIZE=1]LineTo(DC, round(F.x), round(F.y+F.r));[/SIZE] [SIZE=1]end;[/SIZE] [SIZE=1]2: begin[/SIZE] [SIZE=1]MoveToEx(DC,round(F.x-F.r/2),round(F.y-F.r/2),0);[/SIZE] [SIZE=1]LineTo(dc,round(F.x+F.r/2),round(F.y-F.r/2));[/SIZE] [SIZE=1]MoveToEx(DC,round(F.x-F.r/2),round(F.y-F.r/2),0);[/SIZE] [SIZE=1]LineTo(dc,round(F.x-F.r/2),round(F.y+F.r/2));[/SIZE] [SIZE=1]MoveToEx(DC,round(F.x+F.r/2),round(F.y-F.r/2),0);[/SIZE] [SIZE=1]LineTo(dc,round(F.x+F.r/2),round(F.y+F.r/2));[/SIZE] [SIZE=1]MoveToEx(DC,round(F.x-F.r/2),round(F.y+F.r/2),0);[/SIZE] [SIZE=1]LineTo(dc,round(F.x+F.r/2),round(F.y+F.r/2));[/SIZE] [SIZE=1]end;[/SIZE] 3: [B]begin[/B] [B]h:=round(Sqrt(Sqr((F.x-F.r/2)-(F.x))+((F.y-F.r/2)-(F.y))));[/B] [B]d:=round(Abs((F.x-F.r/2)-(F.x)));[/B] [B]if (d=0)or(h=0) then StartU:=0 else StartU:=ArcCos(d/c)-pi/4;[/B] [B]F.x1:=Round(F.x+h*Cos(StartU+u));[/B] [B]F.y1:=Round(F.y+h*Sin(StartU+u));[/B] [B]MoveToEx(DC,F.x,F.y,nil);[/B] [B]F.x1:=round(F.x1+b*Cos(StartU+u));[/B] [B]F.y1:=round(F.y1+b*Sin(StartU+u));[/B] [B]LineTo(DC,F.x1,F.y1);[/B] [B]MoveToEx(DC,F.x1,F.y1,nil);[/B] [B]F.x1:=Round(F.x1+b*Cos(pi/2+StartU+u));[/B] [B]F.y1:=Round(F.y1+b*Sin(pi/2+StartU+u));[/B] [B]LineTo(DC,F.x1,F.y1);[/B] [B]MoveToEx(DC,F.x1,F.y1,nil);[/B] [B]F.x1:=Round(F.x1+b*Cos(pi+StartU+u));[/B] [B]F.y1:=Round(F.y1+b*Sin(pi+StartU+u));[/B] [B]LineTo(DC,F.x1,F.y1);[/B] [B]MoveToEx(DC,F.x1,F.y1,nil);[/B] [B]F.x1:=Round(F.x1+b*Cos(3*pi/2+StartU+u));[/B] [B]F.y1:=Round(F.y1+b*Sin(3*pi/2+StartU+u));[/B] [B]LineTo(dc,F.x1,F.y1);[/B] [B]SelectObject(DC,pen_tmp);[/B] [B]EndPaint(DC, ps)[/B] end; end; end; begin res:= 0; case Message of WM_PAINT: begin DC:=BeginPaint(HWindow,ps); for i:=1 to 10 do begin Drow(F[i], DC); end; SelectObject(DC,pen_tmp); EndPaint(DC, ps); end; |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите написать функцию | Черничный | Общие вопросы Delphi | 4 | 13.08.2008 07:02 |
где описать переменную | Manitu | Помощь студентам | 2 | 14.05.2008 18:23 |
помогите пожалуйста описать две функции | номак | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 08.01.2008 21:31 |
Как в XML Schema правильно описать дочерние элементы | Stilet | HTML и CSS | 4 | 21.11.2007 15:04 |