type
// Π’ΠΈΠΏ TCurve Ρ ΡΠ°Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΡΠΈΠ²ΠΎΠΉ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: Π½Π°ΡΠ°Π»ΠΎ,
// ΠΏΠ΅ΡΠ²ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠΎΡΠΊΡ, Π²ΡΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠΎΡΠΊΡ, ΠΊΠΎΠ½Π΅Ρ
TCurve = array[0..3] of TPoint;
// Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π΄Π»Ρ LineDDA
procedure LineDrawFunc(X, Y: Integer; Canvas: TCanvas); stdcall;
begin
case CurveForm.RGroupType.ItemIndex of
// Π Π°Π·Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΠ°ΡΠΈΠΊΠΈ
0: if CurveForm.FCounter mod 10 = 0 then
begin
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;
Canvas.Brush.Style := bsSolid;
if CurveForm.FCounter mod 15 = 0 then Canvas.Pen.Color := clBlue
else if CurveForm.FCounter mod 15 = 5 then Canvas.Pen.Color := ΡlLime
else Canvas.Pen.Color := clRed;
Canvas.Brush.Color := Canvas.Pen.Color;
Canvas.Ellipse(X - 2, Y - 2, X + 3, Y + 3);
end;
// ΠΠΎΠΏΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΠΎΡΡ
1: it CurveForm.FCounter mod 5 = 0 then
begin
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clBlue;
Canvas.MoveTo(X - CurveForm.FDX, Y - CurveForm.FDY);
Canvas.LineTo(X + CurveForm.FDX, Y + CurveForm.FDY);
end;
// ΠΠ»Π°ΠΊΠ°ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠΎ
2: begin
Canvas.Pen.Style := psSolid;
// ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΏΡΡΠΌΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (X, Y),
// Π° ΡΠΎΡΠ΅Π΄Π½ΡΡ Ρ Π½Π΅ΠΉ - ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (Π₯+1, Y-1). Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ
// ΡΠ΅ΡΠ΅Π· ΡΡΠΈ ΡΠΎΡΠΊΠΈ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ
// ΠΎΡΡΠ°Π½ΡΡΡΡ Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅.
// ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΎΠ»ΡΠΈΠ½Ρ ΠΏΠ΅ΡΠ°
Canvas.Pen.Width := 2;
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(X - 5, Y - 5);
Canvas.LineTo(X + 6, Y + 6);
end;
// Π¦Π΅ΠΏΠΎΡΠΊΠ°
3: begin
case CurveForm.FCounter mod 15 of
0: begin
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clBlack;
Canvas.Brush.Style := bsClear;
Canvas.Ellipse(X - 5, Y - 5, X + 6, Y + 6);
end;
2..13: Canvas.Pixels[X, Y] := clBlack;
end;
end;
end;
Inc(CurveForm.FCounter);
end;
procedure TCurveForm.DrawCurve(Canvas: TCanvas);
var
LCurve: TCurve;
I, Size: Integer;
PtBuf: array of TPoint;
TpBuf: array of Byte;
L: Extended;
begin
// LCurve Ρ ΡΠ°Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° ΠΊΡΠΈΠ²ΠΎΠΉ ΠΈ Π΅Π΅
// ΠΎΠΏΠΎΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ. ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΎΠΏΠΎΡΠ½ΡΠΌ
// ΡΠΎΡΠΊΠ°ΠΌ, LCurve ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ FCurve, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ
// ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΎΡΠΊΠ°ΠΌ ΠΊΡΠΈΠ²ΠΎΠΉ, ΠΎΠΏΠΎΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ LCurve[1]
// ΠΈ LCurve[2] ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π² ΠΊΠ½ΠΈΠ³Π΅
// ΡΠΎΡΠΌΡΠ»Π°ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΡΠ΅ΠΊ FCurve
LCurve := FCurve;
if RGroupDrawMethod.ItemIndex = 1 then
begin
LCurve[1].X :=
Round((-5 * FCurve[0].X + 18 * FCurve[1].X -
9 * FCurve[2].X + 2 * FCurve[3].X) / 6);
LCurve[1].Y :=
Round((-5 * FCurve[0].Y + 18 * FCurve[1].Y -
9 * FCurve[2].Y + 2 * FCurve[3]-Y) / 6);
LCurve[2].X :=
Round((2 * FCurve[0].X - 9 * FCurve[1].X +
18 * FCurve[2].X - 5 * FCurve[3].X) / 6);
LCurve[2].Y :=
Round((2 * FCurve[0].Y - 9 * FCurve[1].Y +
18 * FCurve[2].Y - 5 * FCurve[3].Y) / 6);
end;
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΡΠΈΠ²ΠΎΠΉ
BeginPath(Canvas.Handle);
Canvas.PolyBezier(LCurve);
EndPath(Canvas.Handle);
// ΠΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΡΠ΅ΠΌ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΠ°ΠΌΠΈ ΠΏΡΡΠΌΡΡ
FlattenPath(Canvas.Handle);
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΈΡΠ»ΠΎ ΡΠΎΡΠ΅ΠΊ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΈ ΡΠΎΡΠΊΠΈ Π½ΠΈΠΊΡΠ΄Π°
// ΠΏΠΎΠΊΠ° Π½Π΅ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ
// Π»ΡΠ±ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ - ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ I
Size := GetPath(Canvas.Handle, I, I, 0);
// ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΡΠΈΠΏΠΎΠ² ΡΠΎΡΠ΅ΠΊ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ
SetLength(PtBuf, Size);
SetLength(TpBuf, Size);
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΠΈΠΏΡ ΡΠΎΡΠ΅ΠΊ. Π’ΠΈΠΏΡ ΡΠΎΡΠ΅ΠΊ Π½Π°Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
// Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ: Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΈΠΏ PT_MOVETO,
// Π° Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ - PT_LINETO. ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ PT_MOVETO Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠ΅ΠΊ
// Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ.ΠΊ. ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΌΠΊΠ½ΡΡΡΠΉ
// ΠΊΠΎΠ½ΡΡΡ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΈΠ· ΠΊΡΠΈΠ²ΠΎΠΉ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΠ΅ΠΉ Π΅Π΅ ΠΊΠΎΠ½ΡΡ ΠΏΡΡΠΌΠΎΠΉ.
// ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ ΡΠΈΠΏΠ° PT_BEZIERTO ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΎ, Ρ.ΠΊ. ΠΏΠΎΡΠ»Π΅
// Π²ΡΠ·ΠΎΠ²Π° FlattenPath ΠΊΠΎΠ½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΠ΅Π·ΠΊΠΈ ΠΏΡΡΠΌΡΡ .
// ΠΠΎΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² TpBuf, Π±ΡΠ΄ΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ
// ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ
GetPath(Canvas.Handle, PtBuf[0], TpBuf[0], Size);
FCounter := 0;
// Π ΠΈΡΡΠ΅ΠΌ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΎΡΡΠ΅Π·ΠΊΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΡ
for I := 1 to Size - 1 do
begin
// ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ ΠΎΡΡΠ΅Π·ΠΊΠ°
L :=
Sqrt(Sqr(PtBuf[I - 1].X - PtBuf[I].X) +
Sqr(PtBuf[I - 1].Y - PtBuf[I].Y));
// ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, ΡΡΠΎ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ
// ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΡΡΠ΅Π·ΠΊΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ - Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΡΡΠΎ ΠΈΠ·Π΄Π΅ΡΠΆΠΊΠΈ
// Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ
// Π΄Π΅Π»ΠΈΡΡ Π½Π° L, ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠΈ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ, Ρ.ΠΊ.
// Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ
if L > 0 then begin
// ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ FDX ΠΈ FDY ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
// Π»ΠΈΠ½ΠΈΠΈ ΡΠΈΠΏΠ° "ΠΏΠΎΠΏΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΠΎΡΡ". ΠΡΠ»ΠΈ Π±Ρ Π»ΠΈΠ½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ
// ΡΠΈΠΏΠ° Π½Π΅ Π±ΡΠ»ΠΎ, ΡΠΎ FDX, FDY, Π° ΡΠ°ΠΊ ΠΆΠ΅ L ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ
// Π½Π΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ
FDX := Round (4 * (PtBuf[I - 1].Y - PtBuf[I].Y) / L);
FDY := Round(4 * (PtBuf[I].X - PtBuf[I - 1].X) / L);
LineDDA(PtBuf[I - 1].X, PtBuf[I - 1].Y, PtBuf[I].X, PtBuf[I].Y,
@LineDrawFunc, Integer(Canvas));
end;
end;
end;
1.3.4.5. ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ
ΠΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ" Π»ΠΈΠ½ΠΈΠΈ Π½Π΅ Π³ΠΎΠ΄ΠΈΡΡΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΠΈΠ²ΠΎΠΉ ΠΠ΅Π·ΡΠ΅, Ρ. ΠΊ. ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π΅ Π΄Π²ΡΡ ΡΠΎΡΠ΅ΠΊ, Π° ΡΠ΅ΡΡΡΠ΅Ρ . Π£Π΄ΠΎΠ±Π½Π΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ" ΠΏΡΡΠΌΡΡ, Π·Π°Π΄Π°Π² ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ ΠΊΡΠΈΠ²ΠΎΠΉ, Π° ΠΏΠΎΡΠΎΠΌ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΎΠΏΠΎΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΊΡΠΈΠ²ΠΎΠΉ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°. ΠΡΠΈ ΡΡΠΎΠΌ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡ Π»ΠΈΠ½ΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅Π½ΡΡΡ Π΅Π΅ ΡΡΠΈΠ»Ρ, Ρ.Π΅. ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΠ»Ρ Π΅Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΠ°Π²Π΅ΡΡΠΈΡΡ (ΡΠΈΡ. 1.16).
Π§ΡΠΎΠ±Ρ ΠΊΡΠΈΠ²Π°Ρ Π±ΡΠ»Π° Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π° ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΡ ΠΊΡΠΈΠ²ΡΡ Π±Π΅Π· ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΠΊΡΠΈΠ²ΡΠΌΠΈ, ΠΈ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½Π΅Π΅ β Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΡ ΠΊΡΠΈΠ²ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ½ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΊΡΠΈΠ²ΡΡ , ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΡΠΈΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ, ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠΎΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π·Π°Π»ΠΈΠ²Π°ΡΡ Π²ΡΡ ΡΠΎΡΠΌΡ ΡΠΎΠ½ΠΎΠ²ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π½Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· ΡΡΠΈΡ ΠΊΡΠΈΠ²ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ. ΠΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Ρ.ΠΊ. Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΡΠΈΠ²ΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ, Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ ΠΎΡΡΠ΅Π·ΠΊΠ°ΠΌΠΈ ΠΈ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ LineDDA. ΠΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΊΡΠΈΠ²ΡΡ ΡΡΠ° ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄: Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΡΠ°ΡΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΡΠΈΠ²ΡΠ΅, ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠΎΡΠΌΡ ΡΡΠΎΡ ΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°ΡΡΡΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ, ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ ΡΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π§ΡΠΎΠ±Ρ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠ΅ΡΡΠ°Π»Π°, Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ.
Π ΠΈΡ. 1.16. ΠΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Bezier. ΠΡΠ°ΡΠ½ΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠΈ β ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΡ ΠΈ ΠΎΠΏΠΎΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΅ΡΡΡ Π»ΠΈ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΈΡ ΠΊΡΠΈΠ²ΡΡ Π½Π΅Ρ, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ. ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΎΡΠΏΡΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ, ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²Π°Ρ ΠΏΡΡΠΌΠ°Ρ. ΠΡΠ° ΠΏΡΡΠΌΠ°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΠΎΠΉ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ.
ΠΡΠ»ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΎΠΏΠΎΡΠ½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅Π²ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ , Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΡΡΠΈ (ΠΏΡΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΊΡΠΈΠ²ΠΎΠΉ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π»ΠΈΠ½ΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ β ΠΎΠ½Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΠ°Π²Π΅ΡΡΠΈΡΡ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΆΠ΅ Π½Π΅ Π½Π° ΡΠ°ΠΌΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π° Π½Π° ΡΠ°ΡΡΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ ΡΠΎΠ½. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΡΠΈΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΡΠΈΠ²Π°Ρ ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² Π½Π° ΡΠΎΠ½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²Π½ΠΎΠ²Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ.