여기 참고 해서 php용으로 만들었습니다.
그런데 결과물은 php내장함수와 거의 똑같네요.
좀 다를 줄 알았는데......
php 내장함수를 사용하지 않고 원이나 타원 직선을 그릴수 있는 정도에 만족해야 할듯합니다.
알고리즘에 대한 설명은 없습니다.
test.php
-----------------------------------------------------------------------------------------------------------------------------
<?php
//직선 그리기
function imageline_bresenham(& $im, $startX, $startY, $endX, $endY, $color){
//기준점 계산, 작은 쪽이 출발점, 큰쪽이 도착점
if($endX < $startX){
$dx = $startX - $endX;
$tmpX = $endX;
$tmpgoX = $startX;
}
else{
$dx = $endX - $startX;
$tmpX = $startX;
$tmpgoX = $endX;
}
if($endY < $startY){
$dy = $startY - $endY;
$tmpY = $endY;
$tmpgoY = $startY;
}
else{
$dy = $endY - $startY;
$tmpY = $startY;
$tmpgoY = $endY;
}
/* 기울기에 따른 계산*/
if($dx >= $dy) { //기울기가 1보다 작거나 같을때
$d = $dy * 2 - $dx; //d의 값을 초기화
$incrE = $dy * 2; // E로의 이동을 위해서 쓰이는 증가
$incrNE = ($dy - $dx) * 2; // NE로의 이동을 위해서 쓰이는 증가
$start = $tmpX;
$end = $tmpgoX;
}
else { //기울기가 1보다 클때
$d = $dx * 2 - $dy;
$incrE = $dx * 2;
$incrNE = ($dx - $dy) * 2;
$start = $tmpY;
$end = $tmpgoY;
}
//x, y 좌표 초기화
$x = $startX;
$y = $startY;
imagesetpixel($im, $x, $y, $color);//시작점 찍음
while($start < $end) {
if( $d <= 0) { /*D값이 0보다 작으면 E를 선택 하나의 축만 이동*/
$d += $incrE;
if($dx >= $dy) { // 기울기가 1보다 작을때 X좌표만 증가
if($endX < $startX)
$x--;
else
$x++;
}
else { // 기울기가 1보다 클때 Y좌표만 증가
if($endY < $startY)
$y--;
else
$y++;
}
}
else { /*D값이 0보다 클때 NE를 선택 X,Y 를 같이 이동시킨다.*/
$d += $incrNE;
if($endX < $startX)
$x--;
else
$x++;
if($endY < $startY)
$y--;
else
$y++;
}
imagesetpixel($im, $x, $y, $color);
$start ++;
}
}
function imagearc_bresenham(& $im, $centerX, $centerY, $width, $height, $color) {
$w_r = ceil($width / 2);
$h_r = ceil($height / 2);
$x = 0;
$y = $h_r;
$w_r_square = $w_r * $w_r;
$h_r_square = $h_r * $h_r;
$d = (4 * $h_r_square + $w_r_square * (1 - (4 * $h_r))) / 4;
imagesetpixel($im, $x + $centerX, $y + $centerY, $color);
imagesetpixel($im, $centerX - $x, $y + $centerY, $color);
imagesetpixel($im, $x + $centerX, $centerY - $y , $color);
imagesetpixel($im, $centerX - $x, $centerY - $y, $color);
// $x 독립변수 구간
while($h_r_square * $x < $w_r_square * $y){
++$x;
if($d < 0){
$d += $h_r_square * (2 * $x + 1);
}
else {
--$y;
$d += $h_r_square * (2 * $x + 1) - (2 * $w_r_square * $y);
}
imagesetpixel($im, $x + $centerX, $y + $centerY, $color);
imagesetpixel($im, $centerX - $x, $y + $centerY, $color);
imagesetpixel($im, $x + $centerX, $centerY - $y, $color);
imagesetpixel($im, $centerX - $x, $centerY - $y, $color);
}
// $y 독립변수 구간
$x = $w_r;
$y = 0;
$d = (4 * $w_r_square + $h_r_square * (1 - (4 * $w_r))) / 4;
imagesetpixel($im, $x + $centerX, $y + $centerY, $color);
imagesetpixel($im, $centerX - $x, $y + $centerY, $color);
imagesetpixel($im, $x + $centerX, $centerY - $y, $color);
imagesetpixel($im, $centerX - $x, $centerY - $y, $color);
while($h_r_square * $x > $w_r_square * $y){
++$y;
if($d < 0){
$d += $w_r_square * (2 * $y + 1);
}
else {
--$x;
$d += $w_r_square * (2 * $y + 1) - (2 * $h_r_square * $x);
}
imagesetpixel($im, $x + $centerX, $y + $centerY, $color);
imagesetpixel($im, $centerX - $x, $y + $centerY, $color);
imagesetpixel($im, $x + $centerX, $centerY - $y, $color);
imagesetpixel($im, $centerX - $x, $centerY - $y, $color);
}
}
$w = 400;
$h = 800;
$im = imagecreatetruecolor($w, $h);
$red = imagecolorallocate($im, 255, 0, 0);
imageline_bresenham($im, 200, 200, 100, 0, $red);
imageline_bresenham($im, 200, 200, 400, 100, $red);
imageline_bresenham($im, 200, 200, 400, 200, $red);
imageline_bresenham($im, 200, 200, 400, 300, $red);
imagearc_bresenham($im, 200, 200, 180, 360, $red);
imagearc_bresenham($im, 100, 200, 200, 200, $red);
imageline($im, 200, 600, 100, 400, $red);
imageline($im, 200, 600, 400, 500, $red);
imageline($im, 200, 600, 400, 600, $red);
imageline($im, 200, 600, 400, 700, $red);
imagearc($im, 200, 600, 180, 360, 0, 360, $red);
imagearc($im, 100, 600, 200, 200, 0, 360, $red);
header('Content-Type: image/png');
imagepng($im);
?>
샘플 : http://apmusers.com/php_arc.php
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 2130 | 17년 전 | 1175 | ||
| 2129 |
ⓧ힘내세요
|
17년 전 | 2231 | |
| 2128 | 17년 전 | 2872 | ||
| 2127 | 17년 전 | 4056 | ||
| 2126 | 17년 전 | 3142 | ||
| 2125 | 17년 전 | 1404 | ||
| 2124 | 17년 전 | 1707 | ||
| 2123 | 17년 전 | 2236 | ||
| 2122 | 17년 전 | 1542 | ||
| 2121 | 17년 전 | 1719 | ||
| 2120 | 17년 전 | 2713 | ||
| 2119 | 17년 전 | 2141 | ||
| 2118 | 17년 전 | 1795 | ||
| 2117 |
아름다운세상
|
17년 전 | 4197 | |
| 2116 | 17년 전 | 3048 | ||
| 2115 | 17년 전 | 1435 | ||
| 2114 |
아름다운세상
|
17년 전 | 3569 | |
| 2113 | 17년 전 | 2794 | ||
| 2112 | 17년 전 | 2073 | ||
| 2111 | 17년 전 | 1288 | ||
| 2110 | 17년 전 | 2327 | ||
| 2109 | 17년 전 | 2063 | ||
| 2108 | 17년 전 | 1982 | ||
| 2107 |
휴전합시다
|
17년 전 | 1919 | |
| 2106 | 17년 전 | 1168 | ||
| 2105 |
|
17년 전 | 1871 | |
| 2104 | 17년 전 | 2925 | ||
| 2103 | 17년 전 | 1426 | ||
| 2102 | 17년 전 | 1668 | ||
| 2101 | 17년 전 | 1353 | ||
| 2100 | 17년 전 | 1598 | ||
| 2099 | 17년 전 | 1574 | ||
| 2098 | 17년 전 | 1443 | ||
| 2097 | 17년 전 | 2556 | ||
| 2096 | 17년 전 | 2321 | ||
| 2095 | 17년 전 | 2108 | ||
| 2094 | 17년 전 | 1419 | ||
| 2093 | 17년 전 | 2428 | ||
| 2092 | 17년 전 | 4255 | ||
| 2091 | 17년 전 | 2741 | ||
| 2090 | 17년 전 | 1658 | ||
| 2089 | 17년 전 | 1849 | ||
| 2088 | 17년 전 | 3227 | ||
| 2087 | 17년 전 | 2226 | ||
| 2086 | 17년 전 | 3821 | ||
| 2085 | 17년 전 | 1671 | ||
| 2084 | 17년 전 | 2267 | ||
| 2083 | 17년 전 | 2095 | ||
| 2082 | 17년 전 | 1610 | ||
| 2081 | 17년 전 | 2125 | ||
| 2080 |
letsgolee
|
17년 전 | 1921 | |
| 2079 | 17년 전 | 1957 | ||
| 2078 | 17년 전 | 3069 | ||
| 2077 | 17년 전 | 2143 | ||
| 2076 | 17년 전 | 1436 | ||
| 2075 | 17년 전 | 1457 | ||
| 2074 | 17년 전 | 2125 | ||
| 2073 | 17년 전 | 3206 | ||
| 2072 | 17년 전 | 2136 | ||
| 2071 |
휴전합시다
|
17년 전 | 1531 | |
| 2070 | 17년 전 | 4239 | ||
| 2069 | 17년 전 | 2033 | ||
| 2068 | 17년 전 | 3458 | ||
| 2067 | 17년 전 | 6030 | ||
| 2066 | 17년 전 | 1483 | ||
| 2065 |
letsgolee
|
17년 전 | 1652 | |
| 2064 | 17년 전 | 1235 | ||
| 2063 | 17년 전 | 1347 | ||
| 2062 |
vicky
|
17년 전 | 2873 | |
| 2061 | 17년 전 | 1908 | ||
| 2060 |
카프카07
|
17년 전 | 2594 | |
| 2059 | 17년 전 | 1303 | ||
| 2058 | 17년 전 | 3184 | ||
| 2057 | 17년 전 | 2161 | ||
| 2056 | 17년 전 | 2608 | ||
| 2055 | 17년 전 | 1405 | ||
| 2054 | 17년 전 | 1751 | ||
| 2053 | 17년 전 | 1145 | ||
| 2052 |
|
17년 전 | 1202 | |
| 2051 | 17년 전 | 1785 | ||
| 2050 | 17년 전 | 1227 | ||
| 2049 | 17년 전 | 4310 | ||
| 2048 | 17년 전 | 1504 | ||
| 2047 | 17년 전 | 2002 | ||
| 2046 |
카프카07
|
17년 전 | 7088 | |
| 2045 | 17년 전 | 1382 | ||
| 2044 | 17년 전 | 1895 | ||
| 2043 | 17년 전 | 3132 | ||
| 2042 | 17년 전 | 1221 | ||
| 2041 |
카프카07
|
17년 전 | 1983 | |
| 2040 | 17년 전 | 1153 | ||
| 2039 |
smilesol
|
17년 전 | 1847 | |
| 2038 | 17년 전 | 2152 | ||
| 2037 |
|
17년 전 | 2966 | |
| 2036 | 17년 전 | 1246 | ||
| 2035 |
|
17년 전 | 1334 | |
| 2034 |
ㅣ곰탱이ㅣ
|
17년 전 | 1562 | |
| 2033 |
|
17년 전 | 1232 | |
| 2032 | 17년 전 | 4353 | ||
| 2031 | 17년 전 | 3896 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기