Tikz picture using two “foreach” loops

Clash Royale CLAN TAG#URR8PPP
I am making a picture using foreach. MWE is appended below
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
foreach x in 0,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument
The resulting picture is attached below

Now what I want is that the green arrows on the top should be limited by the black line diagonal line. That is for the first circle there should be no green arrow, and its length should increase until it becomes equal to the red arrow in the last circle. How can this be done using foreach using the variable y. Is there a way such that the intersection of the black diagonal line with the green arrows can be used to limit the length of the green arrows to the desired values? Or is there any other way to achieve this?
tikz-pgf foreach
add a comment |
I am making a picture using foreach. MWE is appended below
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
foreach x in 0,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument
The resulting picture is attached below

Now what I want is that the green arrows on the top should be limited by the black line diagonal line. That is for the first circle there should be no green arrow, and its length should increase until it becomes equal to the red arrow in the last circle. How can this be done using foreach using the variable y. Is there a way such that the intersection of the black diagonal line with the green arrows can be used to limit the length of the green arrows to the desired values? Or is there any other way to achieve this?
tikz-pgf foreach
add a comment |
I am making a picture using foreach. MWE is appended below
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
foreach x in 0,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument
The resulting picture is attached below

Now what I want is that the green arrows on the top should be limited by the black line diagonal line. That is for the first circle there should be no green arrow, and its length should increase until it becomes equal to the red arrow in the last circle. How can this be done using foreach using the variable y. Is there a way such that the intersection of the black diagonal line with the green arrows can be used to limit the length of the green arrows to the desired values? Or is there any other way to achieve this?
tikz-pgf foreach
I am making a picture using foreach. MWE is appended below
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
foreach x in 0,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument
The resulting picture is attached below

Now what I want is that the green arrows on the top should be limited by the black line diagonal line. That is for the first circle there should be no green arrow, and its length should increase until it becomes equal to the red arrow in the last circle. How can this be done using foreach using the variable y. Is there a way such that the intersection of the black diagonal line with the green arrows can be used to limit the length of the green arrows to the desired values? Or is there any other way to achieve this?
tikz-pgf foreach
tikz-pgf foreach
asked Dec 12 at 10:49
Damitr
597312
597312
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
In case you do not want to do analytic computations (or if you do not have a simple parametrization for the line).
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5) ;
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 1,...,5
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
endtikzpicture
enddocument

To make @ArtificialStupidity happy (?) one loop...
documentclass[border=3.14mm]standalone
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
draw [-latex,red](x,-1) -- (x,-1.5) ;
unlessifnumx=0%
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
fi
endtikzpicture
enddocument
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come withcalcand do not require theintersectionslibrary. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)
– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
add a comment |
You can use a simple linear function. Please note that your arrow heads are quite large in your scale. It might be a good idea to choose a larger scale or use another arrow tip to have a better representation of the second case.

documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,0) -- (x,0.1*x);
draw [ultra thin] (5,.5) -- (0,0);
endtikzpicture
enddocument
add a comment |
A PSTricks solution with just one loop only for comparison purposes.
documentclass[pstricks]standalone
usepackagepst-calculate
begindocument
beginpspicture[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,pscalculate8/3)
foreach i in 0,1,...,5%
pstVerb/x ispace 1.5 mul .5 add def%
pscircle[linecolor=blue](!x 1).5
psline[linecolor=red]->(!x 1)(!x 0)
ifnumi=0relaxelsepsline[linecolor=green]->(!x 1)(!x ispace 3 div 1 add)fi
psline[linestyle=dashed](.5,1)(!8 dup 3 div)
endpspicture
enddocument

Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
add a comment |
one more with use of lines intersections, but defined with help of the package intersections:
documentclass[tikz, svgnames, margin=3]standalone
usetikzlibraryintersections
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
draw [ultra thin, name path=A] (5,.5) -- (0,0);
foreach x in 1,...,5
path[name path=Bx] (x,0) -- ++ (0,0.5);
draw[-latex,DarkGreen,
name intersections=of=A and Bx,by=Bx] (x,0) -- (Bx);
endtikzpicture
enddocument

add a comment |
Like this (please observe foreach x in 1,...,5 instead of foreach x in 0,...,5?
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
%foreach x in 0,...,5
% draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-1+0.1*x);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument

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/3.0/"u003ecc by-sa 3.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%2f464497%2ftikz-picture-using-two-foreach-loops%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
In case you do not want to do analytic computations (or if you do not have a simple parametrization for the line).
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5) ;
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 1,...,5
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
endtikzpicture
enddocument

To make @ArtificialStupidity happy (?) one loop...
documentclass[border=3.14mm]standalone
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
draw [-latex,red](x,-1) -- (x,-1.5) ;
unlessifnumx=0%
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
fi
endtikzpicture
enddocument
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come withcalcand do not require theintersectionslibrary. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)
– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
add a comment |
In case you do not want to do analytic computations (or if you do not have a simple parametrization for the line).
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5) ;
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 1,...,5
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
endtikzpicture
enddocument

To make @ArtificialStupidity happy (?) one loop...
documentclass[border=3.14mm]standalone
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
draw [-latex,red](x,-1) -- (x,-1.5) ;
unlessifnumx=0%
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
fi
endtikzpicture
enddocument
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come withcalcand do not require theintersectionslibrary. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)
– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
add a comment |
In case you do not want to do analytic computations (or if you do not have a simple parametrization for the line).
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5) ;
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 1,...,5
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
endtikzpicture
enddocument

To make @ArtificialStupidity happy (?) one loop...
documentclass[border=3.14mm]standalone
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
draw [-latex,red](x,-1) -- (x,-1.5) ;
unlessifnumx=0%
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
fi
endtikzpicture
enddocument
In case you do not want to do analytic computations (or if you do not have a simple parametrization for the line).
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5) ;
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 1,...,5
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
endtikzpicture
enddocument

To make @ArtificialStupidity happy (?) one loop...
documentclass[border=3.14mm]standalone
usepackage[svgnames]xcolor
usepackagetikz
usetikzlibrarycalc
begindocument
begintikzpicture
draw [ultra thin] (5,-0.5) coordinate(aux0) -- (0,-1) coordinate(aux1);
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
draw [-latex,red](x,-1) -- (x,-1.5) ;
unlessifnumx=0%
draw [-latex,DarkGreen] (x,-1) coordinate(aux2) (x,-0.5) coordinate(aux3)
(aux2) -- (intersection cs:first line=(aux2)--(aux3),
second line=(aux0)--(aux1));
fi
endtikzpicture
enddocument
edited Dec 12 at 16:06
answered Dec 12 at 11:09
marmot
85k495179
85k495179
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come withcalcand do not require theintersectionslibrary. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)
– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
add a comment |
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come withcalcand do not require theintersectionslibrary. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)
– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
Using intersections is an interesting idea :)
– TeXnician
Dec 12 at 11:11
@TeXnician These are actually those intersections that come with
calc and do not require the intersections library. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)– marmot
Dec 12 at 11:13
@TeXnician These are actually those intersections that come with
calc and do not require the intersections library. They are restricted to intersections of straight lines, though. (+1 to your analytic solution ;-)– marmot
Dec 12 at 11:13
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
I have used these "calc intersections" before, but I would not have thought of them in this case…
– TeXnician
Dec 12 at 11:22
1
1
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
I am almost happy. The code is not so short and cryptic as mentioned before. :-)
– Artificial Stupidity
Dec 12 at 16:07
2
2
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
@ArtificialStupidity Yes, but of course now it is no longer a valid answer to the question which in its title asks for two loops. (3 loops includes 2, of course ;-)
– marmot
Dec 12 at 16:12
add a comment |
You can use a simple linear function. Please note that your arrow heads are quite large in your scale. It might be a good idea to choose a larger scale or use another arrow tip to have a better representation of the second case.

documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,0) -- (x,0.1*x);
draw [ultra thin] (5,.5) -- (0,0);
endtikzpicture
enddocument
add a comment |
You can use a simple linear function. Please note that your arrow heads are quite large in your scale. It might be a good idea to choose a larger scale or use another arrow tip to have a better representation of the second case.

documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,0) -- (x,0.1*x);
draw [ultra thin] (5,.5) -- (0,0);
endtikzpicture
enddocument
add a comment |
You can use a simple linear function. Please note that your arrow heads are quite large in your scale. It might be a good idea to choose a larger scale or use another arrow tip to have a better representation of the second case.

documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,0) -- (x,0.1*x);
draw [ultra thin] (5,.5) -- (0,0);
endtikzpicture
enddocument
You can use a simple linear function. Please note that your arrow heads are quite large in your scale. It might be a good idea to choose a larger scale or use another arrow tip to have a better representation of the second case.

documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,0) -- (x,0.1*x);
draw [ultra thin] (5,.5) -- (0,0);
endtikzpicture
enddocument
answered Dec 12 at 11:08
TeXnician
24k63084
24k63084
add a comment |
add a comment |
A PSTricks solution with just one loop only for comparison purposes.
documentclass[pstricks]standalone
usepackagepst-calculate
begindocument
beginpspicture[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,pscalculate8/3)
foreach i in 0,1,...,5%
pstVerb/x ispace 1.5 mul .5 add def%
pscircle[linecolor=blue](!x 1).5
psline[linecolor=red]->(!x 1)(!x 0)
ifnumi=0relaxelsepsline[linecolor=green]->(!x 1)(!x ispace 3 div 1 add)fi
psline[linestyle=dashed](.5,1)(!8 dup 3 div)
endpspicture
enddocument

Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
add a comment |
A PSTricks solution with just one loop only for comparison purposes.
documentclass[pstricks]standalone
usepackagepst-calculate
begindocument
beginpspicture[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,pscalculate8/3)
foreach i in 0,1,...,5%
pstVerb/x ispace 1.5 mul .5 add def%
pscircle[linecolor=blue](!x 1).5
psline[linecolor=red]->(!x 1)(!x 0)
ifnumi=0relaxelsepsline[linecolor=green]->(!x 1)(!x ispace 3 div 1 add)fi
psline[linestyle=dashed](.5,1)(!8 dup 3 div)
endpspicture
enddocument

Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
add a comment |
A PSTricks solution with just one loop only for comparison purposes.
documentclass[pstricks]standalone
usepackagepst-calculate
begindocument
beginpspicture[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,pscalculate8/3)
foreach i in 0,1,...,5%
pstVerb/x ispace 1.5 mul .5 add def%
pscircle[linecolor=blue](!x 1).5
psline[linecolor=red]->(!x 1)(!x 0)
ifnumi=0relaxelsepsline[linecolor=green]->(!x 1)(!x ispace 3 div 1 add)fi
psline[linestyle=dashed](.5,1)(!8 dup 3 div)
endpspicture
enddocument

A PSTricks solution with just one loop only for comparison purposes.
documentclass[pstricks]standalone
usepackagepst-calculate
begindocument
beginpspicture[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,pscalculate8/3)
foreach i in 0,1,...,5%
pstVerb/x ispace 1.5 mul .5 add def%
pscircle[linecolor=blue](!x 1).5
psline[linecolor=red]->(!x 1)(!x 0)
ifnumi=0relaxelsepsline[linecolor=green]->(!x 1)(!x ispace 3 div 1 add)fi
psline[linestyle=dashed](.5,1)(!8 dup 3 div)
endpspicture
enddocument

answered Dec 12 at 15:44
Artificial Stupidity
5,29511039
5,29511039
Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
add a comment |
Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
Thanks for upvoting my answer. Now I got a nice hat.
– Artificial Stupidity
Dec 12 at 15:55
add a comment |
one more with use of lines intersections, but defined with help of the package intersections:
documentclass[tikz, svgnames, margin=3]standalone
usetikzlibraryintersections
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
draw [ultra thin, name path=A] (5,.5) -- (0,0);
foreach x in 1,...,5
path[name path=Bx] (x,0) -- ++ (0,0.5);
draw[-latex,DarkGreen,
name intersections=of=A and Bx,by=Bx] (x,0) -- (Bx);
endtikzpicture
enddocument

add a comment |
one more with use of lines intersections, but defined with help of the package intersections:
documentclass[tikz, svgnames, margin=3]standalone
usetikzlibraryintersections
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
draw [ultra thin, name path=A] (5,.5) -- (0,0);
foreach x in 1,...,5
path[name path=Bx] (x,0) -- ++ (0,0.5);
draw[-latex,DarkGreen,
name intersections=of=A and Bx,by=Bx] (x,0) -- (Bx);
endtikzpicture
enddocument

add a comment |
one more with use of lines intersections, but defined with help of the package intersections:
documentclass[tikz, svgnames, margin=3]standalone
usetikzlibraryintersections
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
draw [ultra thin, name path=A] (5,.5) -- (0,0);
foreach x in 1,...,5
path[name path=Bx] (x,0) -- ++ (0,0.5);
draw[-latex,DarkGreen,
name intersections=of=A and Bx,by=Bx] (x,0) -- (Bx);
endtikzpicture
enddocument

one more with use of lines intersections, but defined with help of the package intersections:
documentclass[tikz, svgnames, margin=3]standalone
usetikzlibraryintersections
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,0) circle (0.25);
draw [-latex,red](x,0) -- (x,-.5);
draw [ultra thin, name path=A] (5,.5) -- (0,0);
foreach x in 1,...,5
path[name path=Bx] (x,0) -- ++ (0,0.5);
draw[-latex,DarkGreen,
name intersections=of=A and Bx,by=Bx] (x,0) -- (Bx);
endtikzpicture
enddocument

answered Dec 12 at 11:41
Zarko
120k865155
120k865155
add a comment |
add a comment |
Like this (please observe foreach x in 1,...,5 instead of foreach x in 0,...,5?
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
%foreach x in 0,...,5
% draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-1+0.1*x);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument

add a comment |
Like this (please observe foreach x in 1,...,5 instead of foreach x in 0,...,5?
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
%foreach x in 0,...,5
% draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-1+0.1*x);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument

add a comment |
Like this (please observe foreach x in 1,...,5 instead of foreach x in 0,...,5?
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
%foreach x in 0,...,5
% draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-1+0.1*x);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument

Like this (please observe foreach x in 1,...,5 instead of foreach x in 0,...,5?
documentclassarticle
usepackage[svgnames]xcolor
usepackagetikz
begindocument
begintikzpicture
foreach x in 0,...,5
draw [DodgerBlue](x,-1) circle (0.25);
foreach x in 0,...,5
draw [-latex,red](x,-1) -- (x,-1.5);
%foreach x in 0,...,5
% draw [-latex,DarkGreen](x,-1) -- (x,-0.5);
foreach x in 1,...,5
draw [-latex,DarkGreen](x,-1) -- (x,-1+0.1*x);
draw [ultra thin] (5,-0.5) -- (0,-1);
endtikzpicture
enddocument

edited Dec 12 at 13:31
answered Dec 12 at 11:09
Przemysław Scherwentke
29.6k54594
29.6k54594
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f464497%2ftikz-picture-using-two-foreach-loops%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