- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
import std.stdio;
import std.conv;
bool[128][128] a;
int pow2(int x) { return x * x; }
string GenPw(string x, string y, string r)
{
return "pow2("~r~") > pow2("~x~") + pow2("~y~")";
}
string GenPat(int x_sz, int y_sz, string x_str, string y_str, string r_str, string pat)
{
string GenCond = "(";
foreach (y; 0 .. y_sz)
foreach (x; 0 .. x_sz)
{
if(pat[(y) * x_sz + x] == '1')
{
if(GenCond == "(") GenCond ~= "\n ";
else GenCond ~= " && ";
GenCond ~= "("~GenPw(to!string(x)~"+("~x_str~")",to!string(y)~"+("~y_str~")",r_str)~")\n";
}
}
return GenCond ~ ")";
}
bool checkCoordNeihb(int x, int y, int r)
{
if (pow2(r) > pow2(x) + pow2(y))
{
/// Паттерн-матчинг, если
/// 111
/// 101
/// 111
/// то пиксель 0
if (
mixin
(
GenPat
(
3,3,
"x-1",
"y-1",
"r",
"111"~
"101"~
"111"))
)
return false;
return true;
}
return false;
}
void drawCircle(ref bool[128][128] a, int x, int y, int r)
{
foreach (iy; y - r .. y + r)
{
foreach (ix; x - r .. x + r)
{
if (checkCoordNeihb(ix - x, iy - y, r))
a[ix][iy] = true;
}
}
}
void main()
{
drawCircle(a, 24, 24, 15);
writeln("\n\n");
foreach (ix; 0 .. 128)
{
foreach (iy; 0 .. 128)
{
write(a[ix][iy] ? '1' : '0');
}
writeln();
}
}