Guest User

Untitled

a guest
Oct 22nd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. uses DOS;
  2. var r:registers;
  3. k,x0,y0,i,j,rad,x,y,x1,x2,h,f:integer;
  4. a:real;
  5. c:byte;
  6.  
  7. Procedure SetVM;{Установка видеорежима}
  8. begin
  9. r.ah:=0;
  10. r.al:=$13;
  11. intr($10,r);
  12. end;
  13. Procedure PP(x,y:integer;c:byte);{Процедура для установки пикселя напрямую в
  14. видеопамять}
  15. begin
  16. Mem[$a000:y*320+x]:=c;
  17. end;
  18. procedure BrezenCircle(x0, y0, r: integer);
  19. var
  20. x, y: integer;
  21. dv, dd, dh: integer;
  22. procedure sim(x, y: integer); {построить 4 симметричные точки}
  23. begin
  24. PP(x0+x, y0+y, 4); {верхняя правая четверть}
  25. PP(x0+x, y0-y, 4); {нижняя правая четверть}
  26. PP(x0-x, y0+y, 4); {верхняя левая четверть}
  27. PP(x0-x, y0-y, 4); {нижняя левая четверть}
  28. end;
  29. begin
  30. k:=10;
  31. x:=0;
  32. y:=r;
  33. while((y>=0)or(x<r)) do {обход идет по верхней правой четверти}
  34. begin
  35. sim(x,y);
  36. dv:=abs(r*r - x*x - (y-1)*(y-1)); {сдвиг на 1 вниз}
  37. dh:=abs(r*r - (x+1)*(x+1) - y*y); {сдвиг на 1 вправо}
  38. dd:=abs(r*r - (x+1)*(x+1) - (y-1)*(y-1)); {сдвиг на 1 по диагонали вправо и вниз}
  39. if(dv<dh) then {если сдвиг вниз ближе к радиусу круга}
  40. begin
  41. dec(y);
  42. {кусочек кода где пытался реализовать}
  43. { for i:=x-k to (x+k) do
  44. begin
  45. sim(i,y);
  46. if (y mod 2) = 0 then inc(k);}
  47. end;
  48. if(dd<dv) then {если сдвиг по диагонали ближе к радиусу круга}
  49. begin
  50. inc(x);
  51. {Тот же самый кусок кода}
  52. { for i:=x-k to (x+k) do
  53. begin
  54. sim(i,y);
  55. if (y mod 2) = 0 then inc(k);}
  56. end;
  57. end
  58. else {если сдвиг вправо ближе к радиусу круга}
  59. begin
  60. inc(x);
  61. if(dd<dh) then dec(y); {если сдвиг по диагонали ближе к радиусу круга}
  62. end;
  63. end;
  64. end;
  65. begin
  66. x0:=160;
  67. y0:=100;
  68. a:=0;
  69. rad:=55;
  70. h:=20;
  71. c:=4;
  72. SetVM;
  73. BrezenCircle(x0,y0,rad);
  74.  
  75. readln;
  76. end.
Add Comment
Please, Sign In to add comment