КОНСТРУИРОВАНИЕ / МОДЕЛИРОВАНИЕ / ПРОТОТИПИРОВАНИЕ
Моделирование анаморфных объектов на языке программирования PROCESSING
для просмотра учебного задания используйте стрелки
в нижней части экрана или на клавиатуре
PImage photo;
float Pi = 3.14159265358979323846;
int W, H, WW, HH, XXo, YYo, R, RR;
float alpha=4*Pi/3; //угол alpha должен быть больше Pi
float beta=(alpha-Pi)/2;;
String name="a.jpg";
//===============================================================================
void setup() {
size(2526, 1894);
background(0, 255, 0);
photo = loadImage(name);
W=photo.width;
H=photo.height;
R=int(float(W)/alpha);
RR=R+H;
WW=2*RR;
HH=int(float(RR)*(1+sin(beta)));
XXo=RR; YYo=RR;
for ( int y = 0 ; y < HH; y++ )
for ( int x = 0 ; x < WW; x++ )
if ((h(x-XXo,y-YYo)<RR)&&(h(x-XXo,y-YYo)>R)&&(v(x-XXo,y-YYo)>0)&&(v(x-XXo,y-YYo)<alpha))
{
int x1=int(float(R)*(v(x-XXo,y-YYo)));
int y1=int(h(x-XXo,y-YYo))-R;
int loc = x1 + (H-y1-1)*W;
set(WW-x,y,color(255));
set(WW-x,y,photo.pixels[loc]);
}
save(name);
exit();
}
//===============================================================================
void draw() {
}
//------------------------------------------------
float h(float dx,float dy)
{ return sqrt(dx*dx+dy*dy);
};
//-------------------------------------------------
float v(float dx,float dy)
{float u=asin(dy/h(dx,dy));
float rv=u+beta+Pi;
if ((dx<0)) rv=alpha-rv;
return rv;
};
//-------------------------------------------------
Для просмотра текста программы используйте линейки прокрутки.
Скопируйте текст программы для работы в среде Processing
W
H
Создайте в папке с программой папку data
и сохраните в ней картинку
с этого слайда под именем a.jpg
Соотношение переменных используемых в программе
Результат выполнения программы
Анаморфный объект
Анаморфное преобразование
By Андрей ТОПУНОВ
Анаморфное преобразование
- 41