: - .
- , . , , . , .. . , , - - , . .
, 220100 , , . , , - ( ) "" . (, ).
, , , - . : . . - .
. , Y Y=mX+b (,ROUND(Y)), ( ). , m=dY/dX m=dY, .. m. .., (I+1)=X(I)+1, Y(I+1)=Y(I)+m. . , . , m>1, p Y, . X Y , Y, - dX = dY/m = 1/m.
|
|
p :
: m - (-1<m<1);
(x1,y1) (x2,y2) - p ;
col - ;
_ (x,y,col) - col (x,y);
Round(x) - .
: pp.
1. 1 # x2 2 4.
2.m=(y2-y1)/(x2-x1); y=y1;
3. x 1 2 :
_(x,Round(y),col);
y=y+m;
4. y1=y2 5 6.
5._(x1,y1,col). 7.
6. ().
7..
- . 1965 , . : , y ( ) . ( 0 1) - () ( ). , . :
=2*(y2-y1)-(x2-x1),
x1,y1,x2,y2 - . e>=0 y , 2*(x2-x1), - y , e 2*(y2-y1). .
:
:
: (x1,y1,x2,y2)- ;
col - ;
_(x,y,col) - col (x,y);
sign(x) - , 1, >=0 -1, x<0;
round(x)- ;
abs(x) - , .
: pp.
1.: x=x1; y=y1; dx=abs(x2-x1); dy=abs(y2-y1);
s1=sign(x2-x1); s2=sign(y2-y1);
2. dy>dx 3, 4.
3. dx dy. l "". 5.
4.l "". 5.
5. 2*dy-dx.
6. i 1 dx :
_(x,y,col); e>=0 :
l="" x=x+s1 y=y+s2;
e=e-2*dx
l="" y=y+s2 x=x+s1; e=e+2*dy
7._(x,y,col).
8..
:
: (x1,y1,x2,y2)- ;
ol - ;
_ (x,y,col) - col (x,y);
sign(x) - , 1, >=0 -1, <0;
round(x) - ;
abs(x) - , ;
|
|
: pp.
1.: x=x1; y=y1; dx=abs(x2-x1); dy=abs(y2-y1);
s1=sign(x2-x1); s2=sign(y2-y1);
2. dy<dx l "" 4 3.
3. dx dy. l "". 4.
4. 2*dy-dx.
5. i 1 dx+dy :
_(x,y,col);
e<0 :
l="" y=y+s2 x=x+s1;
e=e+2*dy
:
l="" =+s1 y=y+s2;
e=e-2*dx
6._(x,y,col).
7..
. , X*X+Y*Y=R*R . , 0 R Y SQRT(R*R-X*X). . , . , R, , . , , ( 0 R/SQRT(2)). (, ). :
: rad -
col -
e -
_(x,y,col) - col (x,y)
: .
1.:x=0;y=rad;e=3-2*rad;
2. x<y :
_(x,y,col);
_(y,x,col);
_(y,-x,col);
_(x,-y,col);
_(-x,-y,col);
_(-y,-x,col);
_(-y,x,col);
_(-x,y,col)
3. <0 e=e+4*x+6 5 4.
4.: e=e+4*(x-y)+10; y=y-1
5.x=x+1 2 x<y 6.
6. x=y 7 8.
7.:
_(x,y,col);
_(y,x,col);
_(y,-x,col);
_(x,-y,col);
_(-x,-y,col);
_(-y,-x,col);
_(-y,x,col);
_(-x,y,col).
8..
1. PASCAL , : - .
2. , , , , 15 .
3. , : Y=+-SQRT(r*r-x*x) . ( - , - ; - ).
, 1-3 , .
:
{
. , , . . - 33h. . Intr(IntNo:Byte;varRegs:Registers) Dos. . , , .
|
|
}
program mouse;
uses Crt,Graph,Dos;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
X,Y,X1,Y1:Integer;
L,M,R:Boolean;
BL:Boolean;
{
. () () }
function ReadMouse: Boolean;
var
r: Registers;
begin
r.ax:=0;
intr($33,r);
ReadMouse:=r.ax=$ffff;
end;
{ }
procedure ShowMouseCursor;
var
r:registers;
begin
r.ax:=1;
intr($33,r);
end;
{ ( )}
procedure HideMouseCursor;
var
r:registers;
begin
r.ax:=2;
intr($33,r);
end;
{ }
procedure ReadMouseStatus(var x,y:integer;var LB,MB,RB:boolean);
var
r:Registers;
begin
r.ax:=3;
intr($33,r);
x:=r.cx;
y:=r.dx;
LB:=(r.bx And 1) <> 0;
RB:=(r.bx And 2) <> 0;
MB:=(r.bx And 4) <> 0;
end;
{ }
procedure MoveMouseCursor(x,y:integer);
var r:registers;
begin
r.ax:=4;
r.cx:=x;
r.dx:=y;
intr($33,r);
end;
{
. , . -
}
begin
grDriver:= detect;
InitGraph(grDriver, grMode,'d:\tp7\bgi');
ErrCode:= GraphResult;
if ErrCode = grOk then
begin { Do graphics }
L:=false;M:=false;R:=false;Bl:=true;
SetColor(Cyan);
SetBKColor(LightGray);
if ReadMouse then begin
ShowMouseCursor;
While true do
begin
Repeat ReadMouseStatus (X,Y,L,M,R) Until L or R;
If R then begin
CloseGraph;
Exit end;
While L do ReadMouseStatus(X,Y,L,M,R);
if BL then
begin
X1:=X;Y1:=Y;
Bl:=false
end
else
begin
HideMouseCursor;
Line(X1,Y1,X,Y);
ShowMouseCursor;
Bl:=true
end;
end;
end
else
begin
RestoreCrtMode;Writeln('error');Halt;
end;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
.
4. , , - .
1. , ?
2. ?
3. ?
4. Y ^2+Y^2=R^2? ?
5. ?
1. , . []: 2 . . 2 / . , . ; . . . ; . . . . . - .: , 1985. - 368c.: .
2. , . . [] / . . ; . . . . .; . . . , . . . - .: , 1989. - 503c.
3. , . . : , . [] / . . , . . . - .: -, 1996. - 287c.: .
|
|
4. , . . : [] / . . , . . , . . ; . . . . - .: , 1996. - 176c.: . - ( ).