This repository was archived by the owner on Feb 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlineBresenham.php
123 lines (86 loc) · 2.4 KB
/
lineBresenham.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
header("Content-type: image/png");
$rozmerObrazku['x'] = 300;
$rozmerObrazku['y'] = 300;
$pic = ImageCreate ($rozmerObrazku['x'],$rozmerObrazku['y']); //vytvoreni pic sirka,delka
ImageColorAllocate($pic, 255,255,255); //prvni vyskyt nastavuje pozadi, cervena, zelena, modra
//nastaveni barvy
$barva["cerna"] = ImageColorAllocate ($pic, 0, 0, 0);
$barva["bila"] = ImageColorAllocate($pic, 255,255,255);
//deklarace funkci
function nakresliUsecku($zacatekX,$zacatekY,$konecX,$konecY) {
global $pic;
global $barva;
//pokud je zacatek na pravo od konce, prohodime
if(($zacatekX - $konecX) > 0) {
nakresliUsecku($konecX,$konecY,$zacatekX,$zacatekY);
}
//sklon usecky
if(abs($konecY - $zacatekY) > abs($konecX - $zacatekX)) {
// ano - usecka svira s y mensi uhel nez 45
kresli($zacatekY,$zacatekX,$konecY,$konecX);
}
//tmp
$x = $zacatekX;
$y = $zacatekY;
$rozdil = $konecX-$zacatekX;
$rozdil2 = $konecX-$zacatekX; //pouze pro podminku foru, at nemusime stale pocitat
$dx = 2*($konecX-$zacatekX);
$dy = abs(2*($konecY-$zacatekY));
//plusDy
if(($konecY - $zacatekY) > 0) {
$plusDy = 1;
} else {
$plusDy = -1;
}
//vykresli usecku
for ($i = 0; $i <= $rozdil2; $i++) {
ImageSetPixel($pic, $x, $y, $barva["cerna"]); //Zobrazeni pixelu
$x++;
$rozdil = $rozdil - $dy;
if ($rozdil < 0) {
$y = $y + $plusDy;
$rozdil = $rozdil + $dx;
}
}
}
function kresli($zacatekX,$zacatekY,$konecX,$konecY) {
global $pic;
global $barva;
//pokud je zacatek na pravo od konce, prohodime
if(($zacatekX - $konecX) > 0) {
kresli($konecX, $konecY, $zacatekX, $zacatekY);
}
$x = $zacatekX;
$y = $zacatekY;
$rozdil = $konecX-$zacatekX;
$rozdil2 = $konecX-$zacatekX; //pouze pro podminku foru, at nemusime stale pocitat
$dx = 2*($konecX-$zacatekX);
$dy = abs(2*($konecY-$zacatekY));
//plusDy
if(($konecY - $zacatekY) > 0) {
$plusDy = 1;
} else {
$plusDy = -1;
}
//vykresli usecku
for ($i = 0; $i <= $rozdil2; $i++) {
ImageSetPixel($pic, $x, $y, $barva["cerna"]); //Zobrazeni pixelu
$x++;
$rozdil = $rozdil - $dy;
if ($rozdil < 0) {
$y = $y + $plusDy;
$rozdil = $rozdil + $dx;
}
}
}
//pouziti
$zacatek["x"] = 5;
$zacatek["y"] = 15;
$konec["x"] = 200;
$konec["y"] = 20;
nakresliUsecku($zacatek["x"],$zacatek["y"],$konec["x"],$konec["y"]);
//vysledek
ImagePNG ($pic); //zobrazime obrazek
imagedestroy($pic); //uvolnime pamet
?>