21
$\begingroup$

Ómar Rayo

Ómar Rayo (1928 - 2010) was a Colombian painter best known for his op-art paintings. He completed his first drawing studies at an academy in Buenos Aires. In 1960 he received a Guggenheim scholarship and moved to New York, where he would settle definitively years later in 1976 and where his work would achieve full international recognition.

enter image description here

Ómar Rayo, Xaquima, 1972

Rayo's compositions present series of ribbons that come and go over each other, forming patterns that produce striking optical effects. The result is a geometric labyrinth of simulated three-dimensionality, sometimes made in black and white and other times in bright colors. His mathematical rigor and precision contribute to the impression of infinity that his works produce.

enter image description here

Ómar Rayo, Muy Muiname II, 1994

In 1981 Rayo established the Rayo Museum of Latin American Drawing and Engraving in his native town of Roldanillo, Colombia. Many of Rayo's works are on display, in addition to five hundred works by different Latin American artists who were part of his personal collection.

Fresh Fog

enter image description here

Ómar Rayo, Fresh Fog, 1966

I was able to reproduce the patterns of Fresh Fog, but don't know how to create the shadowy effects to simulate three-dimensionality.

rect = {
   GrayLevel[1], Rectangle[{0, 0}, {3, 1}],
   GrayLevel[0], Rectangle[{0, 1}, {3, 2}],
   GrayLevel[1], Rectangle[{0, 2}, {3, 3}]};

m[t_, r_] := Rotate[Translate[rect, {t, 0}], r]

p = Pi/2;

a =
  {m[0, p], m[3, 0], m[6, 0], m[9, p], m[12, 0], m[15, p],
   m[18, p], m[21, 0], m[24, p], m[27, 0], m[30, 0], m[33, p]};

b = a /. {m[a_, p] :> m[a, 0], m[a_, 0] :> m[a, p]};

Graphics /@ {a, b} // Column

enter image description here

c =
  {Translate[a, {0, 0}],  Translate[b, {0, 3}],  Translate[b, {0, 6}],
   Translate[a, {0, 9}],  Translate[a, {0, 12}], Translate[b, {0, 15}],
   Translate[a, {0, 18}], Translate[b, {0, 21}], Translate[b, {0, 24}],
   Translate[a, {0, 27}], Translate[b, {0, 30}], Translate[a, {0, 33}]};

Graphics[{EdgeForm[GrayLevel[0.7]], Rotate[c, 45 Degree]},
 Axes -> False,
 PlotRange -> {{6, 24}, {6, 24}}]

enter image description here

Question

How can we add the shadowy three-dimensional effects?

$\endgroup$

4 Answers 4

23
$\begingroup$

Using a "dirty" gradient.

c = 667;
ra = Raster[
   Table[Sqrt[1 - x^2] Boole[4 < y <= c || 2*c < y < 3 c - 3] + 
     RandomReal[{-0.06, 0.06}], {x, -1, 1, .001}, {y, 667*3}]];
gra = {Translate[ra, {0, -3} c], Translate[ra, {9, -3} c], 
   Translate[ra, {0, -12} c], Translate[Rotate[ra, Pi/2], {0, -6} c], 
   Translate[Rotate[ra, Pi/2], {0, -9} c], 
   Translate[Scale[ra, {1, 2}], {3, -15/2} c], 
   Translate[Scale[ra, {1, 2}], {6, -15/2} c], 
   Translate[Rotate[Scale[ra, {1, 2}], Pi/2], {9/2, -3} c]};
Graphics[{GeometricTransformation[gra, RotationTransform[#]] & /@ 
   Table[Pi/4 n, {n, 1, 7, 2}]}, ImageSize -> Large, 
 PlotRange -> 5300]

enter image description here

Without PlotRange -> 5300:

enter image description here

Applying ImageEffect[%, "Sepia"] on the first image:

enter image description here

$\endgroup$
1
  • 1
    $\begingroup$ It is amazing that such 3D result can be achieved with 2D graphics! $\endgroup$
    – yarchik
    Commented Jun 13 at 8:06
12
$\begingroup$

3D plotting might be an option:

Clear["Global`*"]
plotOptions = { Mesh -> 2
   , MeshFunctions -> {Function[{x, y, z, u, v}, v]}
   , MeshShading -> {RGBColor[{.96, .94, .90}], GrayLevel[.3]}
   , BoundaryStyle -> Directive[GrayLevel[.3], Thickness[.002]]
   , PlotPoints -> 150, MaxRecursion -> 3
   , Axes -> True, Boxed -> False};

plotA[factor_, size_] := 
 ParametricPlot3D[{factor Cos[theta], Sin[theta], z}, {theta, 0, Pi}, {z, 0, size}
  , Evaluate@plotOptions]
plotB[factor_, size_] := 
 ParametricPlot3D[{z, Sin[theta], factor Cos[theta]}, {theta, 0, Pi}, {z, 0, size}
  , Evaluate@plotOptions]

{p[1], p[2], p[3], p[4]} = {First@plotA[1.5, 3], 
   Translate[First@plotA[3, 3], {1.5, 0, 0}], 
   Translate[First@plotB[1.5, 3], {-1.5, 0, 1.5}], Point[{0, 0, 0}]};

a = MapThread[
     Translate[#1, {#2, 0, 0}] &, {p /@ {1, 3, 3, 1, 3, 2, 4, 3, 1, 3, 3, 1}
    , Table[i, {i, 0, 33, 3}]}];
b = MapThread[
     Translate[#1, {#2, 0, 0}] &, {p /@ {3, 2, 4, 3, 1, 3, 3, 1, 3, 2, 4, 1}
    , Table[i, {i, 0, 33, 3}]}];
c = MapThread[
     Translate[#1, {0, 0,  #2}] &, {{a, b, b, a, a , b, a, b, b, a, b, a}
    , Table[i, {i, 0, 33, 3}]}];

Graphics3D[
 GeometricTransformation[{DirectionalLight[White, {1, 1, 1}], 
   c}, {{RotationMatrix[45 °, {0, 1, 0}], {0, 0, 1}}}]
 , Lighting -> "ThreePoint"
 , ViewPoint -> {.15, 15, 0}
 , Background -> Lighter[Gray, 0.1]
 , PlotRange -> {{19, 37}, {0, 1}, {-11, 7} }
 , Boxed -> False
 , Axes -> False
 , ImageSize -> Medium
 ]

enter image description here

$\endgroup$
11
$\begingroup$

I'd probably try something like the following, but it needs more tweaking to get full fidelity.

shading = LinearGradientImage[{Top, Bottom} -> {GrayLevel[.7], White, White, White, GrayLevel[.7]}, {200, 200}]

enter image description here

offwhite = RGBColor[{.99, .98, .96}];
band = ImageResize[Image[{{offwhite, Black, offwhite}}], {200, 200}]

enter image description here

squareCell[0] = ImageMultiply[band, shading]

enter image description here

squareCell[1] = ImageRotate[squareCell[0]]

enter image description here

pattern = {{1, 0}, {0, 1}};
ImageAssemble[Map[squareCell, pattern, {-1}]]

enter image description here

$\endgroup$
9
$\begingroup$
  • We try to do the more general cases.

  • The main idea is that these ribbons are crossing up and down,so we use Mod similar with MatrixPlot[Table[Mod[i + j, 2], {i, 1, 10}, {j, 1, 10}], Frame -> False] to get such pattern.

  • That is we needs two types of ribbons beltX and beltY.

Clear["Global`*"];
beltX[{x1_, x2_}, {y1_, y2_}] := 
  Table[{{LinearGradientFilling[{Gray, 
       Splice@ConstantArray[White, x2 - x1 + 1], Gray}, Right], 
     Rectangle @@ {{x1, y}, {x2, y + 1}}}, {Black, 
     Rectangle @@ {{x1, y + 1/3}, {x2, y + 2/3}}}}, {y, 
    Range[y1, y2 - 1]}];
(*beltX[{1,2},{5,8}]//Graphics*)
beltY[{x1_, x2_}, {y1_, y2_}] := 
  Table[{{LinearGradientFilling[{Gray, 
       Splice@ConstantArray[White, y2 - y1 + 1], Gray}, Top], 
     Rectangle @@ {{x, y1}, {x + 1, y2}}}, {Black, 
     Rectangle @@ {{x + 1/3, y1}, {x + 2/3, y2}}}}, {x, 
    Range[x1, x2 - 1]}];
(*beltY[{1,2},{5,8}]//Graphics*)
xlist = RandomChoice[{1, 2, 3}, 15];
ylist = RandomChoice[{1, 2, 3}, 17];
xpartitions = Partition[FoldList[Plus, 0, xlist], 2, 1];
ypartitions = Partition[FoldList[Plus, 0, ylist], 2, 1];
g = Graphics[
  Table[If[Mod[i + j, 2] == 1, 
    beltX[xpartitions[[i]], ypartitions[[j]]], 
    beltY[xpartitions[[i]], ypartitions[[j]]]], {i, 1, 
    Length@xpartitions}, {j, 1, Length@ypartitions}], 
  ImageSize -> Large]

enter image description here

  • If we set
xlist = {2, 1, 2, 1, 1, 2, 1, 1, 2, 1};
ylist = {2, 1, 1, 2, 1, 1, 2, 1, 2, 1};

and the filling direction θX = 45 Degree;θY = 135 Degree; and rotate the picture, we can get the original picture.

Clear["Global`*"];
θX = 45   Degree;
θY = 135   Degree;
beltX[{x1_, x2_}, {y1_, y2_}] := 
  Table[{{LinearGradientFilling[{Black, 
       Splice@ConstantArray[White, x2 - x1], Black}, θX], 
     Rectangle @@ {{x1, y}, {x2, y + 1}}}, {Black, 
     Rectangle @@ {{x1, y + 1/3}, {x2, y + 2/3}}}}, {y, 
    Range[y1, y2 - 1]}];
beltY[{x1_, x2_}, {y1_, y2_}] := 
  Table[{{LinearGradientFilling[{Black, 
       Splice@ConstantArray[White, y2 - y1], Black}, θY], 
     Rectangle @@ {{x, y1}, {x + 1, y2}}}, {Black, 
     Rectangle @@ {{x + 1/3, y1}, {x + 2/3, y2}}}}, {x, 
    Range[x1, x2 - 1]}];
xlist = {2, 1, 2, 1, 1, 2, 1, 1, 2, 1};
ylist = {2, 1, 1, 2, 1, 1, 2, 1, 2, 1};
xpartitions = Partition[FoldList[Plus, 0, xlist], 2, 1];
ypartitions = Partition[FoldList[Plus, 0, ylist], 2, 1];
g = Graphics[
  Rotate[#, π/4] &@
   Table[If[Mod[i + j, 2] == 1, 
     beltX[xpartitions[[i]], ypartitions[[j]]], 
     beltY[xpartitions[[i]], ypartitions[[j]]]], {i, 1, 
     Length@xpartitions}, {j, 1, Length@ypartitions}], 
  PlotRange -> {{3, 9}, {3, 9}}]

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.