POV-RAY преобразование кода в Vapory Python - PullRequest
0 голосов
/ 05 июля 2018

Здесь я пытаюсь преобразовать код POV-Ray в Python. Я использую модуль VAPORY. В частности, детали scale <4/3,1,1>*1.75 и pigment{ color rgb<1,1,1>*1.1 } очень запутаны. Не могу понять, как добавить *1.75 и *1.1 в код Python.

ЧИСТЫЙ POV-RAY КОД:

box { <-0.04,-0.04,0>,< 1.03, 1.04, 0.01>   
      // 1st layer: White
      texture{ 
        pigment{ color rgb<1,1,1>*1.1 } 
        finish{ phong 1}
      } // ------------------------------ 
      // 2nd layer: image_map
      texture{
        pigment{
          image_map{ jpeg "Image_gamma_0.jpg"  
          // maps an image on the xy plane from <0,0,0> to <1,1,0> (aspect ratio 1:1)
          // accepted types: gif, tga, iff, ppm, pgm, png, jpeg, tiff, sys
          map_type 0 // 0=planar, 1=spherical, 2=cylindrical, 5=torus
          interpolate 2 // 0=none, 1=linear, 2=bilinear, 4=normalized distance
          once //
         } // end of image_map
       } //  end of pigment
     } // end of texture

     scale <4/3,1,1>*1.75
     rotate<  0, 0,0>
     translate<-1.5,0.1,-2>
} // end of box //

VAPORY CODE:

# box with layered textures
box = Box ([-0.04, -0.04, 0], [1.03, 1.04, 0.01],
           # 1st layer: White
           Texture(
               Pigment('color', [0, 0, 1]),
               Finish('phong', 1)
               ), # End of 1st layer ------------------------------
           # 2nd layer: image_map
           Texture(
               Pigment(
                   ImageMap(
                       'jpeg', 
                       '"Image_gamma_0.jpg"',
                       'gamma', 2.0,
                       'map_type', 0,
                       'interpolate', 2,
                       'once'
                       ), # end of image_map
                   ), # end of pigment
               ), # end of texture
           'scale', [4/3, 1, 1],
           'translate', [-1.5, 0.1, -2]
           ) # end of box # -----------------------

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете использовать numpy для векторной операции:
Список питонов [] соответствует POV-Ray вектору <>
Массив numpy поддерживает желаемое скалярное умножение (* x)

  1. Создайте массив numpy из вашего списка
  2. Умножить массив
  3. Преобразовать массив в список

Как это:

import numpy as np
print(list(np.array([1,2,3])*2.5)) 

результат: [2.5, 5.0, 7.5]

...