КОНСТРУИРОВАНИЕ / МОДЕЛИРОВАНИЕ / ПРОТОТИПИРОВАНИЕ

Моделирование анаморфных объектов на языке программирования 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