I hope that someone can help me understand how to perform the following algorithm in Mathematica, I am taking as reference the next page reference page in your section planar version algorithm desire, the problem is that I still have no idea how to start, I hope someone is So kind to help me. I have tried several hours to implement something but without success. thank you very much for your help

  • $\begingroup$ Show us what you have tried so far; it may be a good starting point for a solution. $\endgroup$
    – MarcoB
    Commented Jan 29, 2017 at 5:12
  • $\begingroup$ Raise or lowered by how much? $\endgroup$
    – Michael E2
    Commented Jan 30, 2017 at 0:01

1 Answer 1


We can use this answer on math.SE to determine on which side of a line a point lies. Based on this formula, we have that the new gray level is given by

f[{{x1_, y1_}, {x2_, y2_}}][gl_, {x_, y_}] := gl + 0.1 Sign[(x - x1) (y2 - y1) - (y - y1) (x2 - x1)]

We can apply this to all pixels recursively in the following manner:

iterate[img_] := Module[{dimx, dimy, pts},
  {dimx, dimy} = ImageDimensions[img];
  pts = Transpose[{RandomInteger[dimx, 2], RandomInteger[dimy, 2]}];
  ImageApplyIndexed[f[pts], img]

img = ConstantImage[0.5, {300, 300}];
Nest[iterate, img, 50]

Mathematica graphics

Below is another test run with more iterations, and I also changed the constant 0.1 in front of Sign to 0.02. This constant determines how much each side is raised or lowered, and it has a big influence on the visual effect.

Nest[iterate, img, 100]

Mathematica graphics

I'm not sure how to prove correctness for this algorithm, so if anyone spots an error please tell me.

  • $\begingroup$ Your pts array is {{x,x},{y,y}} rather than {{x,y},{x,y}} like f is expecting. Maybe throw a Transpose in there so it will work when the image isn't square. $\endgroup$
    – wxffles
    Commented Jan 30, 2017 at 0:52
  • $\begingroup$ @wxffles Good catch, thank you. $\endgroup$
    – C. E.
    Commented Jan 30, 2017 at 1:21

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.