|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 27, 2004 12:06:07 Toxic Не сталкивался, но вот самое простое, что приходит в голову: circle(int x,int y, int r)
{
for(int i=-r;i<=r;i++)
{
int s=sqrt(r*r-i*i);
for(int j=-s;j<=s;j++)
setpixel(x+j,y+i);
}
}
или даже так: circle(int x,int y, int r)
{
int r2=r*r,s;
for(int i=-r;i<=r;i++)
for(int j=0,s=i*i;s<=r2;s+=j,j++,s+=j)
{
setpixel(x-j,y+i);
setpixel(x+j,y+i);
}
} |
|
|
Дата: Мар 27, 2004 18:15:36 может быть 10 лишних точек меня бы и устроили, но хочется разработать алгоротим ориентированный на любые линии, поэтому лишних пикселей может оказаться сколь угодно много. |
|
|
Дата: Мар 27, 2004 18:39:14 у меня есть довольно универсальный алгоритм колличесво итераций равно колличеству закрашиваемых пикселей, но у него есть несколько недостатков. первый из них он не справляестя с самопересечением линии и он строит 1 пиксель за ~ 10^7 тактов. радует то, что, до сих пор я не нашел кривую которую он не мог бы построить |
|
|
Дата: Мар 28, 2004 09:13:49 _vdk Для полиномиальных кривых с положительными степенями параметра количество лишних пикселей будет превышать минимально необходимое не более чем в константное число раз. Пример: x(t)=t^3 y(t)=t^3 Пусть кривую мы строим на отрезке от 0 до k. C постоянным шагом будет нарисованно: dt=1/max(|x'(t)|,|y'(t)|)=1/(3*k^2) k/dt=3*k^3 точек А общая длина кривой sqrt(2)*k^3. А если учитывать то что она идет по диагонали то чтоб ее нарисовать нужно k^3 точек. То есть с фиксированным шагом будет нарисованно всего в 3 раза больше точек. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046 |