Parallel arrows along a curve with tikz












4















I want to draw parallel arrows (for example 10 arrows) from a line to a curve. It is not good idea that dividing the line and curve to 10 parts and then join them to each other because of mathematical reason the resulting arrows are not parallel.



What I have done is the following.



documentclass{standalone}
usepackage{tikz}
usetikzlibrary{arrows,positioning}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
(N p){}
};

draw (0,3.5) --(0,-3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm, minimum width=(10+p)*0.3cm]
(M p){a}
};

foreach p in {5,10,15,...,95} {
draw[-latex,blue] (N p.center) -| (0,0);
}
end{tikzpicture}
end{document}









share|improve this question




















  • 1





    Your code is not compileable.

    – AndréC
    2 days ago
















4















I want to draw parallel arrows (for example 10 arrows) from a line to a curve. It is not good idea that dividing the line and curve to 10 parts and then join them to each other because of mathematical reason the resulting arrows are not parallel.



What I have done is the following.



documentclass{standalone}
usepackage{tikz}
usetikzlibrary{arrows,positioning}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
(N p){}
};

draw (0,3.5) --(0,-3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm, minimum width=(10+p)*0.3cm]
(M p){a}
};

foreach p in {5,10,15,...,95} {
draw[-latex,blue] (N p.center) -| (0,0);
}
end{tikzpicture}
end{document}









share|improve this question




















  • 1





    Your code is not compileable.

    – AndréC
    2 days ago














4












4








4


0






I want to draw parallel arrows (for example 10 arrows) from a line to a curve. It is not good idea that dividing the line and curve to 10 parts and then join them to each other because of mathematical reason the resulting arrows are not parallel.



What I have done is the following.



documentclass{standalone}
usepackage{tikz}
usetikzlibrary{arrows,positioning}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
(N p){}
};

draw (0,3.5) --(0,-3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm, minimum width=(10+p)*0.3cm]
(M p){a}
};

foreach p in {5,10,15,...,95} {
draw[-latex,blue] (N p.center) -| (0,0);
}
end{tikzpicture}
end{document}









share|improve this question
















I want to draw parallel arrows (for example 10 arrows) from a line to a curve. It is not good idea that dividing the line and curve to 10 parts and then join them to each other because of mathematical reason the resulting arrows are not parallel.



What I have done is the following.



documentclass{standalone}
usepackage{tikz}
usetikzlibrary{arrows,positioning}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
(N p){}
};

draw (0,3.5) --(0,-3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm, minimum width=(10+p)*0.3cm]
(M p){a}
};

foreach p in {5,10,15,...,95} {
draw[-latex,blue] (N p.center) -| (0,0);
}
end{tikzpicture}
end{document}






tikz-pgf tikz-arrows






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago







C.F.G

















asked 2 days ago









C.F.GC.F.G

553312




553312








  • 1





    Your code is not compileable.

    – AndréC
    2 days ago














  • 1





    Your code is not compileable.

    – AndréC
    2 days ago








1




1





Your code is not compileable.

– AndréC
2 days ago





Your code is not compileable.

– AndréC
2 days ago










2 Answers
2






active

oldest

votes


















6














I do not really know if I understand what you want but a slight modification of your code produces "parallel arrows from a line to a curve".



documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
node[inner sep=0cm,above,pos=p*0.01,
anchor=center,
minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
(N p){}
};
draw (0,3.5) -- (0,-3.5);

foreach p in {5,10,15,...,95} {
draw[latex-,blue] (N p.center) -- (0,0 |- N p.center);
}
end{tikzpicture}
end{document}


enter image description here



ADDENDTUM: To reverse the arrows, you only need to replace draw[latex-,blue]... but draw[-latex,blue]. However, making the distance equal, requires slightly more effort



documentclass[tikz,border=3.14mm]{standalone}
usetikzlibrary{intersections}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw[name path=arc] (0,3.5) arc (90:-90:1.75 and 3.5);
draw (0,3.5) -- (0,-3.5);

foreach p in {-3.25,-3,...,3.25} {
path[name path=line] (0,p) -- (3,p);
draw[latex-,blue,name intersections={of=line and arc}]
(0,p) -- (intersection-1);
}
end{tikzpicture}
end{document}


enter image description here



You do not need intersections in this case, you could just use



documentclass[tikz,border=3.14mm]{standalone}
begin{document}
begin{tikzpicture}[allow upside down]

draw (0,0) circle (3.5);
draw (0,3.5) arc (90:-90:1.75 and 3.5);
draw (0,3.5) -- (0,-3.5);

clip (0,3.5) arc (90:-90:1.75 and 3.5) -- cycle;
foreach p in {-3.25,-3,...,3.25} {
draw[latex-,blue]
(0,p) -- (3,p);
}
end{tikzpicture}
end{document}





share|improve this answer


























  • Is it possible to reverse the arrows and with equal distance?

    – C.F.G
    2 days ago






  • 1





    @C.F.G Sure. I added a possible way.

    – marmot
    2 days ago











  • Thank you so much. You are so expert.

    – C.F.G
    2 days ago



















2














A PSTricks solution only for fun purposes.



documentclass[pstricks]{standalone}
usepackage{pst-plot}

begin{document}
begin{pspicture}[algebraic](-4,-4)(4,4)
pscircle{3}psline(0,-3)(0,3)
psellipticarc(0,0)(1,3){-90}{90}
curvepnodes[plotpoints=20]{-3}{3}{sqrt(1-(t/3)^2)|t}{A}
foreach i in {1,...,numexprAnodecount-1}{pcline[nodesepB=.4pt]{<-}(0,0|Ai)(Ai)}
end{pspicture}
end{document}


enter image description here






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f469796%2fparallel-arrows-along-a-curve-with-tikz%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6














    I do not really know if I understand what you want but a slight modification of your code produces "parallel arrows from a line to a curve".



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
    node[inner sep=0cm,above,pos=p*0.01,
    anchor=center,
    minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
    (N p){}
    };
    draw (0,3.5) -- (0,-3.5);

    foreach p in {5,10,15,...,95} {
    draw[latex-,blue] (N p.center) -- (0,0 |- N p.center);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    ADDENDTUM: To reverse the arrows, you only need to replace draw[latex-,blue]... but draw[-latex,blue]. However, making the distance equal, requires slightly more effort



    documentclass[tikz,border=3.14mm]{standalone}
    usetikzlibrary{intersections}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw[name path=arc] (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    foreach p in {-3.25,-3,...,3.25} {
    path[name path=line] (0,p) -- (3,p);
    draw[latex-,blue,name intersections={of=line and arc}]
    (0,p) -- (intersection-1);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    You do not need intersections in this case, you could just use



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    clip (0,3.5) arc (90:-90:1.75 and 3.5) -- cycle;
    foreach p in {-3.25,-3,...,3.25} {
    draw[latex-,blue]
    (0,p) -- (3,p);
    }
    end{tikzpicture}
    end{document}





    share|improve this answer


























    • Is it possible to reverse the arrows and with equal distance?

      – C.F.G
      2 days ago






    • 1





      @C.F.G Sure. I added a possible way.

      – marmot
      2 days ago











    • Thank you so much. You are so expert.

      – C.F.G
      2 days ago
















    6














    I do not really know if I understand what you want but a slight modification of your code produces "parallel arrows from a line to a curve".



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
    node[inner sep=0cm,above,pos=p*0.01,
    anchor=center,
    minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
    (N p){}
    };
    draw (0,3.5) -- (0,-3.5);

    foreach p in {5,10,15,...,95} {
    draw[latex-,blue] (N p.center) -- (0,0 |- N p.center);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    ADDENDTUM: To reverse the arrows, you only need to replace draw[latex-,blue]... but draw[-latex,blue]. However, making the distance equal, requires slightly more effort



    documentclass[tikz,border=3.14mm]{standalone}
    usetikzlibrary{intersections}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw[name path=arc] (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    foreach p in {-3.25,-3,...,3.25} {
    path[name path=line] (0,p) -- (3,p);
    draw[latex-,blue,name intersections={of=line and arc}]
    (0,p) -- (intersection-1);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    You do not need intersections in this case, you could just use



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    clip (0,3.5) arc (90:-90:1.75 and 3.5) -- cycle;
    foreach p in {-3.25,-3,...,3.25} {
    draw[latex-,blue]
    (0,p) -- (3,p);
    }
    end{tikzpicture}
    end{document}





    share|improve this answer


























    • Is it possible to reverse the arrows and with equal distance?

      – C.F.G
      2 days ago






    • 1





      @C.F.G Sure. I added a possible way.

      – marmot
      2 days ago











    • Thank you so much. You are so expert.

      – C.F.G
      2 days ago














    6












    6








    6







    I do not really know if I understand what you want but a slight modification of your code produces "parallel arrows from a line to a curve".



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
    node[inner sep=0cm,above,pos=p*0.01,
    anchor=center,
    minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
    (N p){}
    };
    draw (0,3.5) -- (0,-3.5);

    foreach p in {5,10,15,...,95} {
    draw[latex-,blue] (N p.center) -- (0,0 |- N p.center);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    ADDENDTUM: To reverse the arrows, you only need to replace draw[latex-,blue]... but draw[-latex,blue]. However, making the distance equal, requires slightly more effort



    documentclass[tikz,border=3.14mm]{standalone}
    usetikzlibrary{intersections}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw[name path=arc] (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    foreach p in {-3.25,-3,...,3.25} {
    path[name path=line] (0,p) -- (3,p);
    draw[latex-,blue,name intersections={of=line and arc}]
    (0,p) -- (intersection-1);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    You do not need intersections in this case, you could just use



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    clip (0,3.5) arc (90:-90:1.75 and 3.5) -- cycle;
    foreach p in {-3.25,-3,...,3.25} {
    draw[latex-,blue]
    (0,p) -- (3,p);
    }
    end{tikzpicture}
    end{document}





    share|improve this answer















    I do not really know if I understand what you want but a slight modification of your code produces "parallel arrows from a line to a curve".



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5) foreach p in {0,5,...,100} {
    node[inner sep=0cm,above,pos=p*0.01,
    anchor=center,
    minimum height=p*0.03cm,minimum width=(10+p)*0.3cm]
    (N p){}
    };
    draw (0,3.5) -- (0,-3.5);

    foreach p in {5,10,15,...,95} {
    draw[latex-,blue] (N p.center) -- (0,0 |- N p.center);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    ADDENDTUM: To reverse the arrows, you only need to replace draw[latex-,blue]... but draw[-latex,blue]. However, making the distance equal, requires slightly more effort



    documentclass[tikz,border=3.14mm]{standalone}
    usetikzlibrary{intersections}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw[name path=arc] (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    foreach p in {-3.25,-3,...,3.25} {
    path[name path=line] (0,p) -- (3,p);
    draw[latex-,blue,name intersections={of=line and arc}]
    (0,p) -- (intersection-1);
    }
    end{tikzpicture}
    end{document}


    enter image description here



    You do not need intersections in this case, you could just use



    documentclass[tikz,border=3.14mm]{standalone}
    begin{document}
    begin{tikzpicture}[allow upside down]

    draw (0,0) circle (3.5);
    draw (0,3.5) arc (90:-90:1.75 and 3.5);
    draw (0,3.5) -- (0,-3.5);

    clip (0,3.5) arc (90:-90:1.75 and 3.5) -- cycle;
    foreach p in {-3.25,-3,...,3.25} {
    draw[latex-,blue]
    (0,p) -- (3,p);
    }
    end{tikzpicture}
    end{document}






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 2 days ago

























    answered 2 days ago









    marmotmarmot

    91.4k4106199




    91.4k4106199













    • Is it possible to reverse the arrows and with equal distance?

      – C.F.G
      2 days ago






    • 1





      @C.F.G Sure. I added a possible way.

      – marmot
      2 days ago











    • Thank you so much. You are so expert.

      – C.F.G
      2 days ago



















    • Is it possible to reverse the arrows and with equal distance?

      – C.F.G
      2 days ago






    • 1





      @C.F.G Sure. I added a possible way.

      – marmot
      2 days ago











    • Thank you so much. You are so expert.

      – C.F.G
      2 days ago

















    Is it possible to reverse the arrows and with equal distance?

    – C.F.G
    2 days ago





    Is it possible to reverse the arrows and with equal distance?

    – C.F.G
    2 days ago




    1




    1





    @C.F.G Sure. I added a possible way.

    – marmot
    2 days ago





    @C.F.G Sure. I added a possible way.

    – marmot
    2 days ago













    Thank you so much. You are so expert.

    – C.F.G
    2 days ago





    Thank you so much. You are so expert.

    – C.F.G
    2 days ago











    2














    A PSTricks solution only for fun purposes.



    documentclass[pstricks]{standalone}
    usepackage{pst-plot}

    begin{document}
    begin{pspicture}[algebraic](-4,-4)(4,4)
    pscircle{3}psline(0,-3)(0,3)
    psellipticarc(0,0)(1,3){-90}{90}
    curvepnodes[plotpoints=20]{-3}{3}{sqrt(1-(t/3)^2)|t}{A}
    foreach i in {1,...,numexprAnodecount-1}{pcline[nodesepB=.4pt]{<-}(0,0|Ai)(Ai)}
    end{pspicture}
    end{document}


    enter image description here






    share|improve this answer




























      2














      A PSTricks solution only for fun purposes.



      documentclass[pstricks]{standalone}
      usepackage{pst-plot}

      begin{document}
      begin{pspicture}[algebraic](-4,-4)(4,4)
      pscircle{3}psline(0,-3)(0,3)
      psellipticarc(0,0)(1,3){-90}{90}
      curvepnodes[plotpoints=20]{-3}{3}{sqrt(1-(t/3)^2)|t}{A}
      foreach i in {1,...,numexprAnodecount-1}{pcline[nodesepB=.4pt]{<-}(0,0|Ai)(Ai)}
      end{pspicture}
      end{document}


      enter image description here






      share|improve this answer


























        2












        2








        2







        A PSTricks solution only for fun purposes.



        documentclass[pstricks]{standalone}
        usepackage{pst-plot}

        begin{document}
        begin{pspicture}[algebraic](-4,-4)(4,4)
        pscircle{3}psline(0,-3)(0,3)
        psellipticarc(0,0)(1,3){-90}{90}
        curvepnodes[plotpoints=20]{-3}{3}{sqrt(1-(t/3)^2)|t}{A}
        foreach i in {1,...,numexprAnodecount-1}{pcline[nodesepB=.4pt]{<-}(0,0|Ai)(Ai)}
        end{pspicture}
        end{document}


        enter image description here






        share|improve this answer













        A PSTricks solution only for fun purposes.



        documentclass[pstricks]{standalone}
        usepackage{pst-plot}

        begin{document}
        begin{pspicture}[algebraic](-4,-4)(4,4)
        pscircle{3}psline(0,-3)(0,3)
        psellipticarc(0,0)(1,3){-90}{90}
        curvepnodes[plotpoints=20]{-3}{3}{sqrt(1-(t/3)^2)|t}{A}
        foreach i in {1,...,numexprAnodecount-1}{pcline[nodesepB=.4pt]{<-}(0,0|Ai)(Ai)}
        end{pspicture}
        end{document}


        enter image description here







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 days ago









        God Must Be CrazyGod Must Be Crazy

        6,08011039




        6,08011039






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f469796%2fparallel-arrows-along-a-curve-with-tikz%23new-answer', 'question_page');
            }
            );

            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







            Popular posts from this blog

            Paul Cézanne

            UIScrollView CustomStickyHeader Resize height generates problems when scroll is too fast

            Angular material date-picker (MatDatepicker) auto completes the date on focus out