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

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

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

> Найдите ошибку, Графика
Neon6868
сообщение 11.12.2007 20:25
Сообщение #1


Пионер
**

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

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


Задание: Построить три равносторонних треугольника, вращающихся вокруг одной из своих вершин. Эти вершины должны находиться на одинаковом расстоянии от центра экрана.

Треугольник строится не равносторонний!Подскажите почему? И подскажите как сделать вращение?
Программа:

  

Program Grafika;
uses Graph,CRT;
var
x,y,x1,y1,x2,y2,x3,y3,a1,b1,a2,b2,a3,b3,c1,d1,c2,d2,c3,d3,r:integer;
procedure GraphRezhim;
var
Driver,Mode,Error:integer;
begin
Driver:=detect;
Initgraph(Driver,Mode,'D:\BGI');
Error:=GraphResult;
if Error<>grOk then writeln('GraphErrorMsg(Error)');
end;
procedure Vershini(var x1,y1,a1,b1,c1,d1:integer;x,y,r:integer);
var
coo:ArcCoordsType;
begin
Arc(x,y,0,90,r);
GetArcCoords(coo);
x1:=coo.Xend;
y1:=coo.Yend;
Arc(x,y,0,210,r);
GetArcCoords(coo);
a1:=coo.Xend;
b1:=coo.Yend;
Arc(x,y,0,330,r);
GetArcCoords(coo);
c1:=coo.Xend;
d1:=coo.Yend;
ClearDevice;
end;
procedure Treugolnik(var x1,y1,x2,y2,x3,y3:integer;x,y:integer);
begin
x:=round((GetMaxX div 10)*cos(2*pi*1/3));
y:=round((GetMaxX div 10)*sin(2*pi*1/3));
x1:=x1+x;
y1:=y1+y;
x:=round((GetMaxX div 10)*cos(2*pi*2/3));
y:=round((GetMaxX div 10)*sin(2*pi*2/3));
x2:=x1+x;
y2:=y1+y;
x:=round((GetMaxX div 10)*cos(2*pi*3/3));
y:=round((GetMaxX div 10)*sin(2*pi*3/3));
x3:=x2+x;
y3:=y2+y;
line(x1,y1,x2,y2);
line(x3,y3,x1,y1);
line(x2,y2,x3,y3);
end;
procedure Dvizhenie(x1,y1,x2,y2,x3,y3,
a1,b1,a2,b2,a3,b3,c1,d1,c2,d2,c3,d3:integer);
begin
while not keypressed do
begin
{Не знаю как сделать}
end;
end;
Begin
GraphRezhim;
Vershini(x1,y1,a1,b1,c1,d1,GetMaxX div 2,GetMaxY div 2,GetMaxY div 4);
Treugolnik(x1,y1,x2,y2,x3,y3,x1,y1);
Treugolnik(a1,b1,a2,b2,a3,b3,a1,b1);
Treugolnik(c1,d1,c2,d2,c3,d3,c1,d1);
readln;
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 12.12.2007 1:47
Сообщение #2


Гость






Ну, вот так, скажем:
uses crt, graph;

type
polar = record
phi, r: integer;
end;
tri = record
cx, cy: integer;
pts: array[1 .. 3] of polar;
end;

procedure show_triangle(const T: tri);

procedure line(p1, p2: integer);
begin
graph.line(
T.cx + trunc(T.pts[p1].r * cos(T.pts[p1].phi * pi / 180)),
T.cy - trunc(T.pts[p1].r * sin(T.pts[p1].phi * pi / 180)),
T.cx + trunc(T.pts[p2].r * cos(T.pts[p2].phi * pi / 180)),
T.cy - trunc(T.pts[p2].r * sin(T.pts[p2].phi * pi / 180))
);
end;

begin
line(1, 2);
line(1, 3);
line(2, 3);
end;

procedure rotate(var T: tri);
var i: integer;
begin
for i := 1 to 3 do begin
inc(T.pts[i].phi, 5);
if T.pts[i].phi > 360 then dec(T.pts[i].phi, 360);
end;
show_triangle(T);
end;

procedure graphix;
var dr, mode, error: integer;
begin
dr := detect;
initgraph(dr, mode, '');
error := graphresult;
if error <> grOk then writeln(grapherrormsg(error));
end;


var
i, R, angle: integer;
figures: array[1 .. 3] of tri;

begin
graphix;

R := getmaxy div 4;
angle := 90;
for i := 1 to 3 do
with figures[i] do begin
cx := (getmaxx div 2) + trunc(R * cos((angle + pred(i) * 120) * pi / 180));
cy := (getmaxy div 2) - trunc(R * sin((angle + pred(i) * 120) * pi / 180));
pts[1].phi := 0; pts[1].r := 0;
pts[2].phi := 240; pts[2].r := 50;
pts[3].phi := 300; pts[3].r := 50;
end;

while not keypressed do begin
cleardevice;
for i := 1 to 3 do rotate(figures[i]);
delay(1000);
end;

readln;
closegraph;
end.

rolleyes.gif
 К началу страницы 
+ Ответить 
Neon6868
сообщение 13.12.2007 19:21
Сообщение #3


Пионер
**

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

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


Спасибо за программу. Но напиши лучше формулу, по которой определяются координаты вершин треугольников при повороте? Я в твоей программе не могу понять где это!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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