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
сообщение 11.12.2007 21:37
Сообщение #2


Гость






Цитата
Треугольник строится не равносторонний!
Какой именно? Из вообще-то 3 строится, и (почему-то) у меня видно что они все 3 равносторонние...
 К началу страницы 
+ Ответить 
Neon6868
сообщение 12.12.2007 1:05
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 11.12.2007 21:37) *

Какой именно? Из вообще-то 3 строится, и (почему-то) у меня видно что они все 3 равносторонние...


Да, треугольника 3 и они на самом деле равносторонние. Я понял: на экране они показываются как неравносторонние из-за разрешения. А как мне сделать вращение этих треугольников вокруг одной из своих вершин? Я ниже сделал вращение одного треугольника, но не вокруг вершины! А как сделать вокруг вершины?


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,u,q,j: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 Vershina(var x1,y1:integer;x,y,r,u:integer);
var
coo:ArcCoordsType;
begin
setcolor(0);
Arc(x,y,0,u,r);
GetArcCoords(coo);
x1:=coo.Xend;
y1:=coo.Yend;
ClearDevice;
Setcolor(14);
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*3/3));
y:=round((GetMaxX div 10)*sin(2*pi*3/3));
x3:=x1+x;
y3:=y1+y;
x:=round((GetMaxX div 10)*cos(2*pi*2/3));
y:=round((GetMaxX div 10)*sin(2*pi*2/3));
x2:=x3+x;
y2:=y3+y;
line(x1,y1,x2,y2);
line(x3,y3,x1,y1);
line(x2,y2,x3,y3);
end;
Begin
GraphRezhim;
u:=90;
q:=210;
j:=330;
while not keypressed do
begin
Vershina(x1,y1,GetMaxX div 2,GetMaxY div 2,GetMaxY div 4,u);
Vershina(a1,b1,GetMaxX div 2,GetMaxY div 2,GetMaxY div 4,q);
Vershina(c1,d1,GetMaxX div 2,GetMaxY div 2,GetMaxY div 4,j);
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);
Delay(1000);
u:=u+1;
end;
readln;
End.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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