ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΡΠ°Π½ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΈΡΠΏΠ»Π΅Ρ Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎ-Π»ΡΡΠ΅Π²ΠΎΠΉ ΡΡΡΠ±ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΠ — ΡΠΊΡΠ°Π½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΅Π½, Π½Π΅Π»ΡΠ·Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΎΡΡΠ΅Π·ΠΎΠΊ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π² Π΄ΡΡΠ³ΡΡ. ΠΡΠΎΡΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΡΡΡΠΈΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΎΡΡΠ΅Π·ΠΎΠΊ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠ°ΡΡΡ. Π Π°ΡΡΡΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½Π°Ρ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°
«ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²»
Π¦Π΅Π»Ρ ΡΠ°Π±ΠΎΡΡ: Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΡΠΎΡΠΌΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ: Π»ΠΈΠ½ΠΈΠΈ, ΠΊΡΡΠ³ΠΈ, ΡΠ»Π»ΠΈΠΏΡΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ:
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΡΠ°Π½ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΈΡΠΏΠ»Π΅Ρ Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎ-Π»ΡΡΠ΅Π²ΠΎΠΉ ΡΡΡΠ±ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΠ — ΡΠΊΡΠ°Π½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΅Π½, Π½Π΅Π»ΡΠ·Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΎΡΡΠ΅Π·ΠΎΠΊ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π² Π΄ΡΡΠ³ΡΡ. ΠΡΠΎΡΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΡΡΡΠΈΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΎΡΡΠ΅Π·ΠΎΠΊ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠ°ΡΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ:
1. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ°ΡΡΡ ΠΏΡΡΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.
Π ΠΈΡ. 1. Π Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΠ° ΠΏΡΡΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ
Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌ Π»ΠΈΠ½ΠΈΡ ΠΊΡΡΠ³
Π Π°ΡΡΡΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΡΠ΅ΡΠΊΠ° ΡΠΎΡΠ΅ΠΊ, ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΠ°ΠΆΠ΄Π°Ρ ΡΠΎΡΠΊΠ° ΡΠ°ΡΡΡΠ° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ: ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈ ΡΠ²ΠΎΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ. Π Π°ΡΡΡΠΎΠ²ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ.
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° ΠΏΡΡΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ — ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΡ Π·Π°Π΄Π°Ρ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ. Π‘ΠΌΡΡΠ» Π΅Π΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π²Π±Π»ΠΈΠ·ΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ², Π»Π΅ΠΆΠ°ΡΠΈΡ Π½Π° Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΡΠΊΠ΅.
Π ΠΈΡ. 2. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ°ΡΡΡ ΠΏΡΡΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ
Π ΡΡΠ½ΠΊΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Canvas. ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΎ Π΄Π»ΠΈΠ½Ρ ΠΏΠΎ ΠΎΡΠΈ oX ΠΈΠ»ΠΈ oY, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π»ΠΈΠ½Π½Π΅Π΅:
if abs (X2 — X1) >= abs (Y2 — Y1) then Length := abs (X2 — X1)
else Length := abs (Y2 — Y1);
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠΈ:
dX := (X2 — X1) / Length;
dY := (Y2 — Y1) / Length;
ΠΠΌΠ΅Ρ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π»ΠΈΠ½Ρ Π»ΠΈΠ½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΡΡΠΌΡΡ, Π½ΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ:
X := X1 + 0.5 * Sign (dX);
Y := Y1 + 0.5 * Sign (dY);
ΠΠ΄Π΅ΡΡ Sign — ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1, Π΅ΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ; 1, Π΅ΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ; ΠΈ 0, Π΅ΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ.
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ i Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅:
i := 1;
Π Π·Π°ΠΏΡΡΡΠΈ ΡΠΈΠΊΠ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΈ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠ° Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΡΠΎΡΠΊΠΈ, ΡΠΈΠΊΠ» Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° i <= Length:
i := 1;
While i <= Length do begin
Canvas.Pixels[Trunc (X), Trunc (Y)] := clBlue;
X := X + dX;
Y := Y + dY;
i := i + 1
end;
2. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΡΡΠ³Π°.
Π ΠΈΡ. 3. ΠΡΡΠ³
ΠΡΡΠ³ — Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΠ΅ΠΊ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ, ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠ΅Π½ΡΡΠΎΠΌ ΠΊΡΡΠ³Π°, Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°Π΄ΠΈΡΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΠ³Π°. ΠΡΠ»ΠΈ ΡΠ°Π΄ΠΈΡΡ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, ΡΠΎ ΠΊΡΡΠ³ Π²ΡΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΠΎΡΠΊΡ.
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΡΡΠ³Π° Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ³Π»Π° ΠΊΡΡΠ³Π° X1 ΠΈ Y1 ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ X2 ΠΈ Y2, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Canvas.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ°Π΄ΠΈΡΡ
R := abs (X2 — X1) div 2.
Π’ΠΎΡΠΊΡ ΡΠ΅Π½ΡΡΠ° ΠΊΡΡΠ³Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊ:
X := X1 + (X2 — X1) div 2;
Y := Y1 + (Y2 — Y1) div 2;
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π½ΡΠ»Π΅Π²ΠΎΠΉ Π³ΡΠ°Π΄ΡΡ: i := 0 ΠΈ Π² ΡΠΈΠΊΠ»Π΅, ΠΏΠΎΠΊΠ° i Π½Π΅ Π±ΡΠ΄Π΅Ρ <= 359 Π³ΡΠ°Π΄ΡΡΠΎΠ² Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΡΠ°Π΄ΠΈΡΡΡ ΠΊΡΡΠ³Π° ΠΎΡ Π΅Π³ΠΎ ΡΠ΅Π½ΡΡΠ°, Π° ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΡΡΠΎΠ² Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎ 30 ΠΌΠΈΠ½ΡΡ, Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΡΡΠ°:
While i <= 359 do begin
Canvas.Pixels[Trunc (X + R * Sin (i)), Trunc (Y + R * Cos (i))] := clRed;
i := i + 0.3
end;
3. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ»Π»ΠΈΠΏΡΠ°.
Π ΠΈΡ. 4. ΠΠ»Π»ΠΈΠΏΡ
ΠΠ»Π»ΠΈΠΏΡΠΎΠΌ - Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΠ΅ΠΊ, ΡΡΠΌΠΌΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎ Π΄Π²ΡΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠ΅ΠΊ F1 ΠΈ F2, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΡΠΎΠΊΡΡΠ°ΠΌΠΈ ΡΠ»Π»ΠΈΠΏΡΠ°, Π΅ΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½Π°Ρ.
ΠΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π΄ΠΈΡΡ, Π° Π΄Π²Π°: ΠΏΠΎ ΠΎΡΠΈ oX ΠΈ oY. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠ°Π΄ΠΈΡΡΠΎΠ²:
Canvas.Pixels[Trunc (X + xR * Sin (i)), Trunc (Y + yR * Cos (i))] := clLime;
Π ΠΈΡ. 5. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠ»Π»ΠΈΠΏΡΠ°
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²:
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° Π»ΠΈΠ½ΠΈΠΈ
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° ΠΊΡΡΠ³Π°
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° ΡΠ»Π»ΠΈΠΏΡΠ°
ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
unit ULab1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan;
type
TMainForm = class (TForm)
ButtonClear: TButton;
ElementsGroup: TRadioGroup;
PaintBox: TPaintBox;
procedure ButtonClearClick (Sender: TObject);
procedure PaintBoxPaint (Sender: TObject);
procedure PaintBoxMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBoxMouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
end;
var
MainForm: TMainForm;
SX, SY: Word;
procedure Line (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
procedure Circle (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
procedure Ellipse (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
implementation
{$R *.dfm}
function Sign (Val: Single): ShortInt;
begin
if Val > 0 then Result := 1 else
if Val < 0 then Result := -1
else Result := 0
end;
procedure Line (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var i, Leng: Word;
X, Y, dX, dY: Single;
begin
if abs (X2 — X1) >= abs (Y2 — Y1) then Leng := abs (X1 — X2)
else Leng := abs (Y1 — Y2); // ΠΠ»ΠΈΠ½Π°
// ΠΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ
dX := (X2 — X1) / Leng;
dY := (Y2 — Y1) / Leng;
X := X1 + 0.5*Sign (dX);
Y := Y1 + 0.5*Sign (dY);
i := 1;
while i <= Leng do begin
Canvas.Pixels[Trunc (X), Trunc (Y)] := clBlue;
X := X + dX;
Y := Y + dY;
i := i + 1
end
end;
procedure Circle (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var R, X, Y: Word;
i: Single;
begin
R := abs (X1 — X2) div 2; // Π Π°Π΄ΠΈΡΡ
// Π¦Π΅Π½ΡΡ
X := X1 + (X2 — X1) div 2;
Y := Y1 + (Y2 — Y1) div 2;
i := 0;
While i <= 359 do begin
Canvas.Pixels[Trunc (X + R * Sin (i)), Trunc (Y + R * Cos (i))] := clRed;
i := i + 0.1
end;
end;
procedure Ellipse (X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var xR, yR, X, Y: Word;
i: Single;
begin
xR := abs (X1 — X2) div 2; // Π Π°Π΄ΠΈΡΡ X
yR := abs (Y1 — Y2) div 2; // Π Π°Π΄ΠΈΡΡ Y
// Π¦Π΅Π½ΡΡ
X := X1 + (X2 — X1) div 2;
Y := Y1 + (Y2 — Y1) div 2;
i := 0;
While i <= 359 do begin
Canvas.Pixels[Trunc (X + xR * Sin (i)), Trunc (Y + yR * Cos (i))] := clLime;
i := i + 0.1
end;
end;
procedure TMainForm. ButtonClearClick (Sender: TObject);
begin
with PaintBox. Canvas do begin
Brush.Color := clBlack;
FillRect (PaintBox.ClientRect)
end
end;
procedure TMainForm. PaintBoxPaint (Sender: TObject);
begin
ButtonClear.Click
end;
procedure TMainForm. PaintBoxMouseDown (Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SX := X;
SY := Y
end;
procedure TMainForm. PaintBoxMouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case ElementsGroup. ItemIndex of
0: Line (SX, SY, X, Y, PaintBox. Canvas);
1: Circle (SX, SY, X, Y, PaintBox. Canvas);
2: Ellipse (SX, SY, X, Y, PaintBox. Canvas);
end
end;
end.
ΠΡΠ²ΠΎΠ΄: Π Ρ ΠΎΠ΄Π΅ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. ΠΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΡΠΎΡΠΌΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ: Π»ΠΈΠ½ΠΈΠΈ, ΠΊΡΡΠ³ΠΈ, ΡΠ»Π»ΠΈΠΏΡΡ.