Skip to content

Instantly share code, notes, and snippets.

@yousry
Created December 13, 2016 09:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yousry/60e6e2757300667ca15dd893768ea316 to your computer and use it in GitHub Desktop.
Save yousry/60e6e2757300667ca15dd893768ea316 to your computer and use it in GitHub Desktop.
Sourcecode for: Deconstruction of Optical Illusions
int main (int argc, const char * argv[])
{
@autoreleasepool {
YAVector2i *res = [[YAVector2i alloc] initVals: 800 : 800];
YAVector4f *backColor = [[YAVector4f alloc] initVals: 0.99 : 0.99 : 0.99 : 1];
YACanvas *canvas = [[YACanvas alloc] initResolution: res Color: backColor];
float lineW = 9;
float lineSP = res.x / 25;
YAVector2i *startPos = [YAVector2i new];
YAVector2i *endPos = [YAVector2i new];
YAVector3f *gridCol = [[YAVector3f alloc] initVal: 0.5];
startPos.y = 0;
endPos.y = res.y - 1;
for(int x = lineSP / 2; x < res.x; x += lineSP ) {
startPos.x = x; endPos.x = x; [canvas plotLine: startPos To: endPos Color: gridCol Width: lineW];
}
startPos.x = 0;
endPos.x = res.x - 1;
for(int y = lineSP / 2; y < res.y; y += lineSP ) {
startPos.y = y; endPos.y = y; [canvas plotLine: startPos To: endPos Color: gridCol Width: lineW];
}
startPos.y = 0;
endPos.y = res.y - 1;
for(int x = - res.x + lineSP; x < res.x; x += lineSP * 2) {
startPos.x = x; endPos.x = x + res.x; [canvas plotLine: startPos To: endPos Color: gridCol Width: lineW / 2.0f];
}
for(int x = lineSP - floorf(lineW / 2.) ; x < res.x * 2; x += lineSP * 2) {
startPos.x = x; endPos.x = x - res.x; [canvas plotLine: startPos To: endPos Color: gridCol Width: lineW / 2.0f];
}
YAVector2i *blobRes = [[YAVector2i alloc] initVal: 13];
YAVector2i *origin = [[YAVector2i alloc] initVal: (lineSP / 2) - 2];
YABlob* blobB = [[YABlob alloc] initCanvas: canvas];
[blobB.color setValue: 1.0];
blobB.radius = 6.0f;
YABlob* blobA = [[YABlob alloc] initCanvas: canvas];
[blobA.color setValue: 0.03];
blobA.radius = 5.0f;
YAVector2i *blobPos = [YAVector2i new];
[blobRes sweep: ^(YAVector2i *pos) {
if(pos.x % 2 == 0 && pos.y % 2 == 0) {
blobPos.x = pos.x * 2 * lineSP + origin.x;
blobPos.y = pos.y * 2 * lineSP + origin.y;
[blobB drawAt: blobPos];
[blobA drawAt: blobPos];
}
}];
[canvas writeJPGTo: @"Opti_A.jpg"];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment