Draw a checker pattern with a black X in the center
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{
margin-bottom:0;
}
I am trying to recreate the following image in TikZ
Using some old code I was able to produce the following result
While I was able to produce the correct result, I feel that my solution was a bit strange as it required two passes. Any suggestions for alternative approaches, or improvements to the code are more than welcome.
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[x=1cm]
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size}
{
pgfmathparse{mod(x+y,size) ? "none" : "black"}
edefcolour{pgfmathresult}
path[draw=black, fill=colour] (x,y) rectangle ++ (1,1);
pgfmathparse{x==y ? "black" : "none"}
edefcolour{pgfmathresult}
path[fill=colour] (x,y) rectangle ++ (1,1);
}
draw (0,0)--(0,size+1)--(size+1,size+1)--(size+1,0)--cycle;
end{tikzpicture}
end{document}
tikz-pgf code-review
add a comment
|
I am trying to recreate the following image in TikZ
Using some old code I was able to produce the following result
While I was able to produce the correct result, I feel that my solution was a bit strange as it required two passes. Any suggestions for alternative approaches, or improvements to the code are more than welcome.
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[x=1cm]
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size}
{
pgfmathparse{mod(x+y,size) ? "none" : "black"}
edefcolour{pgfmathresult}
path[draw=black, fill=colour] (x,y) rectangle ++ (1,1);
pgfmathparse{x==y ? "black" : "none"}
edefcolour{pgfmathresult}
path[fill=colour] (x,y) rectangle ++ (1,1);
}
draw (0,0)--(0,size+1)--(size+1,size+1)--(size+1,0)--cycle;
end{tikzpicture}
end{document}
tikz-pgf code-review
add a comment
|
I am trying to recreate the following image in TikZ
Using some old code I was able to produce the following result
While I was able to produce the correct result, I feel that my solution was a bit strange as it required two passes. Any suggestions for alternative approaches, or improvements to the code are more than welcome.
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[x=1cm]
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size}
{
pgfmathparse{mod(x+y,size) ? "none" : "black"}
edefcolour{pgfmathresult}
path[draw=black, fill=colour] (x,y) rectangle ++ (1,1);
pgfmathparse{x==y ? "black" : "none"}
edefcolour{pgfmathresult}
path[fill=colour] (x,y) rectangle ++ (1,1);
}
draw (0,0)--(0,size+1)--(size+1,size+1)--(size+1,0)--cycle;
end{tikzpicture}
end{document}
tikz-pgf code-review
I am trying to recreate the following image in TikZ
Using some old code I was able to produce the following result
While I was able to produce the correct result, I feel that my solution was a bit strange as it required two passes. Any suggestions for alternative approaches, or improvements to the code are more than welcome.
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[x=1cm]
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size}
{
pgfmathparse{mod(x+y,size) ? "none" : "black"}
edefcolour{pgfmathresult}
path[draw=black, fill=colour] (x,y) rectangle ++ (1,1);
pgfmathparse{x==y ? "black" : "none"}
edefcolour{pgfmathresult}
path[fill=colour] (x,y) rectangle ++ (1,1);
}
draw (0,0)--(0,size+1)--(size+1,size+1)--(size+1,0)--cycle;
end{tikzpicture}
end{document}
tikz-pgf code-review
tikz-pgf code-review
edited May 28 at 4:14
Community♦
1
1
asked May 27 at 14:00
N3buchadnezzarN3buchadnezzar
4,9576 gold badges44 silver badges99 bronze badges
4,9576 gold badges44 silver badges99 bronze badges
add a comment
|
add a comment
|
4 Answers
4
active
oldest
votes
With tikz
:
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{4}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
end{document}
Note: Value of size
had to be zero or any even natural number (0, 2, 4, ...)
addendum:
- default baseline of above image is as
(current bounding box.south)˙ For series of those images for different value of
size` is:
documentclass{article}
usepackage{tikz}
usepackage{tabularx}
newcolumntype{C}{>{centeringarraybackslash}X}
begin{document}
begin{figure}
begin{tabularx}{linewidth}{>{hsize=0.5hsize}C C >{hsize=1.5hsize}C}
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{0} % in this MWE the meaning of `size` is changed
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[%baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{1}
foreach y in {0,...,2*size} % changed, now number of boxes is odd
foreach x in {0,...,2*size} % changed,
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{2}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
end{tabularx}
end{figure}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Withedefsize{1}
? I'm not sure if I understood your comment correctly.
– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png
– N3buchadnezzar
May 27 at 15:37
Indeed. It should besize{0}
.
– Zarko
May 27 at 15:41
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
|
show 1 more comment
A PSTricks solution only for fun purposes!
documentclass[border=1pt]{standalone}
usepackage{pstricks}
defobj#1{%
pspicture[dimen=m](#1,#1)
multips(0,0)(0,1){#1}{multips(0,0)(1,0){#1}{psframe(1,1)}}
multips(0,0)(1,1){#1}{psframe*(1,1)}
multips(0,#1)(1,-1){#1}{psframe*(1,-1)}
endpspicture}
begin{document}
foreach i in {3,5,7}{obj{i}quad}
end{document}
Edit
I invented the algorithm (that has not been patented yet) as follows. No nested loop is needed.
documentclass[border=12pt]{standalone}
usepackage[nomessages]{fp}
usepackage{xintexpr}
usepackage{pstricks}
psset{unit=5mm}
defobj#1{%
pspicture[dimen=m](#1,#1)
FPevalN{#1*#1-1}
foreach j in {0,...,N}
{
FPevaly{trunc(j/#1:0)}
FPevalx{j-#1*y}
xintifboolexpr{x=y||(x+y)=(#1-1)}
{psframe[fillstyle=solid,fillcolor=black](x,y)(+x+1,y+1)}
{psframe(x,y)(+x+1,y+1)}
}
endpspicture}
begin{document}
foreach i in {1,3,5,7,9}{obj{i}quad}
end{document}
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
add a comment
|
Edit:
The following works for all values of size
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size} {
pgfmathsetmacro{colour}{(x==y || x+y==size) ? "black" : "none"}
draw[fill=colour] (x,y) rectangle ++ (1,1);
}
end{tikzpicture}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Themod
function was not a good choice,pgfmathparse{x+y==size ? "black" : "colour"}
is better.
– AboAmmar
May 27 at 17:00
add a comment
|
I do not see the reason for a double loop, nor complicated conditions.
documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[xboard/.style={insert path={
(0,0) grid (#1,#1)
foreach X in {1,...,#1}
{(X-0.5,X-0.5) pic{bx} (X-0.5,#1-X+0.5) pic{bx}}}},
pics/bx/.style={code={fill (-0.5,-0.5) rectangle (0.5,0.5);}}]
draw[xboard=1] [xshift=2cm,xboard=3]
[xshift=4cm,xboard=5] [xshift=6cm,xboard=7];
end{tikzpicture}
end{document}
add a comment
|
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f492863%2fdraw-a-checker-pattern-with-a-black-x-in-the-center%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
With tikz
:
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{4}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
end{document}
Note: Value of size
had to be zero or any even natural number (0, 2, 4, ...)
addendum:
- default baseline of above image is as
(current bounding box.south)˙ For series of those images for different value of
size` is:
documentclass{article}
usepackage{tikz}
usepackage{tabularx}
newcolumntype{C}{>{centeringarraybackslash}X}
begin{document}
begin{figure}
begin{tabularx}{linewidth}{>{hsize=0.5hsize}C C >{hsize=1.5hsize}C}
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{0} % in this MWE the meaning of `size` is changed
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[%baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{1}
foreach y in {0,...,2*size} % changed, now number of boxes is odd
foreach x in {0,...,2*size} % changed,
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{2}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
end{tabularx}
end{figure}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Withedefsize{1}
? I'm not sure if I understood your comment correctly.
– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png
– N3buchadnezzar
May 27 at 15:37
Indeed. It should besize{0}
.
– Zarko
May 27 at 15:41
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
|
show 1 more comment
With tikz
:
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{4}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
end{document}
Note: Value of size
had to be zero or any even natural number (0, 2, 4, ...)
addendum:
- default baseline of above image is as
(current bounding box.south)˙ For series of those images for different value of
size` is:
documentclass{article}
usepackage{tikz}
usepackage{tabularx}
newcolumntype{C}{>{centeringarraybackslash}X}
begin{document}
begin{figure}
begin{tabularx}{linewidth}{>{hsize=0.5hsize}C C >{hsize=1.5hsize}C}
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{0} % in this MWE the meaning of `size` is changed
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[%baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{1}
foreach y in {0,...,2*size} % changed, now number of boxes is odd
foreach x in {0,...,2*size} % changed,
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{2}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
end{tabularx}
end{figure}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Withedefsize{1}
? I'm not sure if I understood your comment correctly.
– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png
– N3buchadnezzar
May 27 at 15:37
Indeed. It should besize{0}
.
– Zarko
May 27 at 15:41
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
|
show 1 more comment
With tikz
:
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{4}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
end{document}
Note: Value of size
had to be zero or any even natural number (0, 2, 4, ...)
addendum:
- default baseline of above image is as
(current bounding box.south)˙ For series of those images for different value of
size` is:
documentclass{article}
usepackage{tikz}
usepackage{tabularx}
newcolumntype{C}{>{centeringarraybackslash}X}
begin{document}
begin{figure}
begin{tabularx}{linewidth}{>{hsize=0.5hsize}C C >{hsize=1.5hsize}C}
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{0} % in this MWE the meaning of `size` is changed
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[%baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{1}
foreach y in {0,...,2*size} % changed, now number of boxes is odd
foreach x in {0,...,2*size} % changed,
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{2}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
end{tabularx}
end{figure}
end{document}
With tikz
:
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}[
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{4}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
end{document}
Note: Value of size
had to be zero or any even natural number (0, 2, 4, ...)
addendum:
- default baseline of above image is as
(current bounding box.south)˙ For series of those images for different value of
size` is:
documentclass{article}
usepackage{tikz}
usepackage{tabularx}
newcolumntype{C}{>{centeringarraybackslash}X}
begin{document}
begin{figure}
begin{tabularx}{linewidth}{>{hsize=0.5hsize}C C >{hsize=1.5hsize}C}
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{0} % in this MWE the meaning of `size` is changed
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[%baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{1}
foreach y in {0,...,2*size} % changed, now number of boxes is odd
foreach x in {0,...,2*size} % changed,
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
&
begin{tikzpicture}[baseline=(current bounding box.south),
node distance = 0mm,
box/.style = {draw, minimum size=10mm, fill=black,
outer sep=0pt},
]
edefsize{2}
foreach y in {0,...,size}
foreach x in {0,...,size}
{ifnumx=y
node[box] at (x,size-y) {};
node[box] at (x,y) {};
else
node[box,fill=none] at (x,y) {};
fi
}
end{tikzpicture}
caption{}
end{tabularx}
end{figure}
end{document}
edited May 27 at 18:04
answered May 27 at 15:01
ZarkoZarko
149k8 gold badges85 silver badges196 bronze badges
149k8 gold badges85 silver badges196 bronze badges
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Withedefsize{1}
? I'm not sure if I understood your comment correctly.
– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png
– N3buchadnezzar
May 27 at 15:37
Indeed. It should besize{0}
.
– Zarko
May 27 at 15:41
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
|
show 1 more comment
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Withedefsize{1}
? I'm not sure if I understood your comment correctly.
– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png
– N3buchadnezzar
May 27 at 15:37
Indeed. It should besize{0}
.
– Zarko
May 27 at 15:41
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
With
edefsize{1}
? I'm not sure if I understood your comment correctly.– Zarko
May 27 at 15:36
With
edefsize{1}
? I'm not sure if I understood your comment correctly.– Zarko
May 27 at 15:36
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png– N3buchadnezzar
May 27 at 15:37
size{1}
produces 4 black squares not 1. Here is how it looks for n=1 and n=2, not the same baseheight either. i.imgur.com/0OamEbM.png– N3buchadnezzar
May 27 at 15:37
Indeed. It should be
size{0}
.– Zarko
May 27 at 15:41
Indeed. It should be
size{0}
.– Zarko
May 27 at 15:41
1
1
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
@N3buchadnezzar, images are aligned to their bottom side. also see "Note" in edited answer.
– Zarko
May 27 at 16:06
|
show 1 more comment
A PSTricks solution only for fun purposes!
documentclass[border=1pt]{standalone}
usepackage{pstricks}
defobj#1{%
pspicture[dimen=m](#1,#1)
multips(0,0)(0,1){#1}{multips(0,0)(1,0){#1}{psframe(1,1)}}
multips(0,0)(1,1){#1}{psframe*(1,1)}
multips(0,#1)(1,-1){#1}{psframe*(1,-1)}
endpspicture}
begin{document}
foreach i in {3,5,7}{obj{i}quad}
end{document}
Edit
I invented the algorithm (that has not been patented yet) as follows. No nested loop is needed.
documentclass[border=12pt]{standalone}
usepackage[nomessages]{fp}
usepackage{xintexpr}
usepackage{pstricks}
psset{unit=5mm}
defobj#1{%
pspicture[dimen=m](#1,#1)
FPevalN{#1*#1-1}
foreach j in {0,...,N}
{
FPevaly{trunc(j/#1:0)}
FPevalx{j-#1*y}
xintifboolexpr{x=y||(x+y)=(#1-1)}
{psframe[fillstyle=solid,fillcolor=black](x,y)(+x+1,y+1)}
{psframe(x,y)(+x+1,y+1)}
}
endpspicture}
begin{document}
foreach i in {1,3,5,7,9}{obj{i}quad}
end{document}
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
add a comment
|
A PSTricks solution only for fun purposes!
documentclass[border=1pt]{standalone}
usepackage{pstricks}
defobj#1{%
pspicture[dimen=m](#1,#1)
multips(0,0)(0,1){#1}{multips(0,0)(1,0){#1}{psframe(1,1)}}
multips(0,0)(1,1){#1}{psframe*(1,1)}
multips(0,#1)(1,-1){#1}{psframe*(1,-1)}
endpspicture}
begin{document}
foreach i in {3,5,7}{obj{i}quad}
end{document}
Edit
I invented the algorithm (that has not been patented yet) as follows. No nested loop is needed.
documentclass[border=12pt]{standalone}
usepackage[nomessages]{fp}
usepackage{xintexpr}
usepackage{pstricks}
psset{unit=5mm}
defobj#1{%
pspicture[dimen=m](#1,#1)
FPevalN{#1*#1-1}
foreach j in {0,...,N}
{
FPevaly{trunc(j/#1:0)}
FPevalx{j-#1*y}
xintifboolexpr{x=y||(x+y)=(#1-1)}
{psframe[fillstyle=solid,fillcolor=black](x,y)(+x+1,y+1)}
{psframe(x,y)(+x+1,y+1)}
}
endpspicture}
begin{document}
foreach i in {1,3,5,7,9}{obj{i}quad}
end{document}
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
add a comment
|
A PSTricks solution only for fun purposes!
documentclass[border=1pt]{standalone}
usepackage{pstricks}
defobj#1{%
pspicture[dimen=m](#1,#1)
multips(0,0)(0,1){#1}{multips(0,0)(1,0){#1}{psframe(1,1)}}
multips(0,0)(1,1){#1}{psframe*(1,1)}
multips(0,#1)(1,-1){#1}{psframe*(1,-1)}
endpspicture}
begin{document}
foreach i in {3,5,7}{obj{i}quad}
end{document}
Edit
I invented the algorithm (that has not been patented yet) as follows. No nested loop is needed.
documentclass[border=12pt]{standalone}
usepackage[nomessages]{fp}
usepackage{xintexpr}
usepackage{pstricks}
psset{unit=5mm}
defobj#1{%
pspicture[dimen=m](#1,#1)
FPevalN{#1*#1-1}
foreach j in {0,...,N}
{
FPevaly{trunc(j/#1:0)}
FPevalx{j-#1*y}
xintifboolexpr{x=y||(x+y)=(#1-1)}
{psframe[fillstyle=solid,fillcolor=black](x,y)(+x+1,y+1)}
{psframe(x,y)(+x+1,y+1)}
}
endpspicture}
begin{document}
foreach i in {1,3,5,7,9}{obj{i}quad}
end{document}
A PSTricks solution only for fun purposes!
documentclass[border=1pt]{standalone}
usepackage{pstricks}
defobj#1{%
pspicture[dimen=m](#1,#1)
multips(0,0)(0,1){#1}{multips(0,0)(1,0){#1}{psframe(1,1)}}
multips(0,0)(1,1){#1}{psframe*(1,1)}
multips(0,#1)(1,-1){#1}{psframe*(1,-1)}
endpspicture}
begin{document}
foreach i in {3,5,7}{obj{i}quad}
end{document}
Edit
I invented the algorithm (that has not been patented yet) as follows. No nested loop is needed.
documentclass[border=12pt]{standalone}
usepackage[nomessages]{fp}
usepackage{xintexpr}
usepackage{pstricks}
psset{unit=5mm}
defobj#1{%
pspicture[dimen=m](#1,#1)
FPevalN{#1*#1-1}
foreach j in {0,...,N}
{
FPevaly{trunc(j/#1:0)}
FPevalx{j-#1*y}
xintifboolexpr{x=y||(x+y)=(#1-1)}
{psframe[fillstyle=solid,fillcolor=black](x,y)(+x+1,y+1)}
{psframe(x,y)(+x+1,y+1)}
}
endpspicture}
begin{document}
foreach i in {1,3,5,7,9}{obj{i}quad}
end{document}
edited May 27 at 16:55
answered May 27 at 14:23
Artificial StupidityArtificial Stupidity
6,2861 gold badge14 silver badges50 bronze badges
6,2861 gold badge14 silver badges50 bronze badges
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
add a comment
|
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
One downvote detected...
– Artificial Stupidity
May 27 at 14:31
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
Accessing 2 dimensional arrays with a single-indexed pointer is much faster.
– Artificial Stupidity
May 27 at 17:04
add a comment
|
Edit:
The following works for all values of size
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size} {
pgfmathsetmacro{colour}{(x==y || x+y==size) ? "black" : "none"}
draw[fill=colour] (x,y) rectangle ++ (1,1);
}
end{tikzpicture}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Themod
function was not a good choice,pgfmathparse{x+y==size ? "black" : "colour"}
is better.
– AboAmmar
May 27 at 17:00
add a comment
|
Edit:
The following works for all values of size
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size} {
pgfmathsetmacro{colour}{(x==y || x+y==size) ? "black" : "none"}
draw[fill=colour] (x,y) rectangle ++ (1,1);
}
end{tikzpicture}
end{document}
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Themod
function was not a good choice,pgfmathparse{x+y==size ? "black" : "colour"}
is better.
– AboAmmar
May 27 at 17:00
add a comment
|
Edit:
The following works for all values of size
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size} {
pgfmathsetmacro{colour}{(x==y || x+y==size) ? "black" : "none"}
draw[fill=colour] (x,y) rectangle ++ (1,1);
}
end{tikzpicture}
end{document}
Edit:
The following works for all values of size
documentclass[tikz]{standalone}
begin{document}
begin{tikzpicture}
edefsize{4}
foreach x in {0,...,size} foreach y in {0,...,size} {
pgfmathsetmacro{colour}{(x==y || x+y==size) ? "black" : "none"}
draw[fill=colour] (x,y) rectangle ++ (1,1);
}
end{tikzpicture}
end{document}
edited May 27 at 17:45
answered May 27 at 14:50
AboAmmarAboAmmar
37.1k3 gold badges31 silver badges91 bronze badges
37.1k3 gold badges31 silver badges91 bronze badges
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Themod
function was not a good choice,pgfmathparse{x+y==size ? "black" : "colour"}
is better.
– AboAmmar
May 27 at 17:00
add a comment
|
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
Themod
function was not a good choice,pgfmathparse{x+y==size ? "black" : "colour"}
is better.
– AboAmmar
May 27 at 17:00
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
How can this produce the correct case with only one black box?
– N3buchadnezzar
May 27 at 15:33
The
mod
function was not a good choice, pgfmathparse{x+y==size ? "black" : "colour"}
is better.– AboAmmar
May 27 at 17:00
The
mod
function was not a good choice, pgfmathparse{x+y==size ? "black" : "colour"}
is better.– AboAmmar
May 27 at 17:00
add a comment
|
I do not see the reason for a double loop, nor complicated conditions.
documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[xboard/.style={insert path={
(0,0) grid (#1,#1)
foreach X in {1,...,#1}
{(X-0.5,X-0.5) pic{bx} (X-0.5,#1-X+0.5) pic{bx}}}},
pics/bx/.style={code={fill (-0.5,-0.5) rectangle (0.5,0.5);}}]
draw[xboard=1] [xshift=2cm,xboard=3]
[xshift=4cm,xboard=5] [xshift=6cm,xboard=7];
end{tikzpicture}
end{document}
add a comment
|
I do not see the reason for a double loop, nor complicated conditions.
documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[xboard/.style={insert path={
(0,0) grid (#1,#1)
foreach X in {1,...,#1}
{(X-0.5,X-0.5) pic{bx} (X-0.5,#1-X+0.5) pic{bx}}}},
pics/bx/.style={code={fill (-0.5,-0.5) rectangle (0.5,0.5);}}]
draw[xboard=1] [xshift=2cm,xboard=3]
[xshift=4cm,xboard=5] [xshift=6cm,xboard=7];
end{tikzpicture}
end{document}
add a comment
|
I do not see the reason for a double loop, nor complicated conditions.
documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[xboard/.style={insert path={
(0,0) grid (#1,#1)
foreach X in {1,...,#1}
{(X-0.5,X-0.5) pic{bx} (X-0.5,#1-X+0.5) pic{bx}}}},
pics/bx/.style={code={fill (-0.5,-0.5) rectangle (0.5,0.5);}}]
draw[xboard=1] [xshift=2cm,xboard=3]
[xshift=4cm,xboard=5] [xshift=6cm,xboard=7];
end{tikzpicture}
end{document}
I do not see the reason for a double loop, nor complicated conditions.
documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[xboard/.style={insert path={
(0,0) grid (#1,#1)
foreach X in {1,...,#1}
{(X-0.5,X-0.5) pic{bx} (X-0.5,#1-X+0.5) pic{bx}}}},
pics/bx/.style={code={fill (-0.5,-0.5) rectangle (0.5,0.5);}}]
draw[xboard=1] [xshift=2cm,xboard=3]
[xshift=4cm,xboard=5] [xshift=6cm,xboard=7];
end{tikzpicture}
end{document}
answered May 28 at 3:26
user121799
add a comment
|
add a comment
|
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f492863%2fdraw-a-checker-pattern-with-a-black-x-in-the-center%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown