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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 13:04   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию окружность

Здраствуйте
в результате работы программы внизу должна получиться практически цельная окружность, но появляется это, почему так?

Код:
uses dos,crt;
const
cylh=80;
type
tpoints = record
x,y,z:real;
end;
tpointsxy = record
x,y:integer;
end;
var
points:array[0..100] of tpoints;
xy:array[0..100] of tpointsxy;

procedure initgraph;
var
r: registers;
begin
 SwapVectors;
 r.ah:=$00;
 r.ax:=$13;
 intr($10,r);
 SwapVectors;
end;

procedure closegraph;
var
r: registers;
begin
 SwapVectors;
 r.ah:=$00;
 r.ax:=$03;
 intr($10,r);
 SwapVectors;
end;

procedure Pixel(x,y:integer; Color: byte);
var r:registers;
begin
 SwapVectors;
 R.AH := $C;
 R.AL := Color;
 R.CX := x;
 R.DX := y;
 intr($10, R);
 SwapVectors;
end;

procedure swap(var a,b:integer);
var c:integer;
begin
c:=a;a:=b;b:=c;
end;

procedure line(x1,y1,x2,y2:integer;color:byte);
var i:integer;
    xs,ys:real;
begin
if abs(x2-x1)>abs(y2-y1) then
   begin
     if x2-x1<>0 then ys:=(y2-y1)/(x2-x1) else ys:=0;
     if x1>x2 then begin swap(y1,y2);swap(x1,x2); end;
   for i:=0 to abs(x2-x1) do pixel(x1+i,y1+round(i*ys),color);
   end
 else
   begin
     if y2-y1<>0 then xs:=(x2-x1)/(y2-y1) else xs:=0;
     if y1>y2 then begin swap(y1,y2);swap(x1,x2); end;
   for i:=0 to abs(y2-y1) do pixel(x1+round(i*xs),y1+i,color);
   end;
end;

procedure figura;
var i,r:integer;  x,y,a,b,x1,y1:integer;
begin
{cilindr}   a:=45; b:=a;    r:=30;
for i:=0 to 19 do
  begin
    points[i].x:=-CylH/2;
    points[i].y:=r*cos(i);
    points[i].z:=r*sin(i);
    points[i+20].x:=CylH/2;
    points[i+20].y:=points[i].y;
    points[i+20].z:=points[i].z;
  end;
  for i:=0 to 39 do begin
    xy[i].x:=160+round(points[i].x*cos(a)*cos(b)+points[i].y*cos(a)*sin(b)-points[i].z*sin(a));
    xy[i].y:=100+round(points[i].y*cos(b)-points[i].x*sin(b));
    x:=x+160; y:=y+100;
    pixel(xy[i].x,xy[i].y,3);
    end;
  for i:=1 to 19 do
  line(xy[i-1].x,xy[i-1].y,xy[i].x,xy[i].x,3);

end;
begin
initgraph;

while not keypressed do
begin;
figura;
end;

closegraph;
end.
MetR вне форума Ответить с цитированием
Старый 08.01.2011, 13:05   #2
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

и картинка почему то не отобразилась, вот результат:
MetR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
окружность в делфи forestm Общие вопросы Delphi 1 03.01.2011 03:58
Прямая и Окружность Ukeeler Помощь студентам 5 02.11.2010 17:50
Пунктирная окружность Гамбит Помощь студентам 3 13.03.2010 14:39
Окружность.. surovii Помощь студентам 28 29.03.2009 18:00