13

Is there a way to fill a sign, say the sign ' / ', with red in steps?

Because, I ask myself if I could create sth. like that, using the corresponding character from a matching font (in the picture U+3042 (12354)):

enter image description here

No MWE:

\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
Animate\tikz[scale=11, transform shape]\node{/};
\end{document}
g.kov
  • 21,864
  • 1
  • 58
  • 95
cis
  • 8,073
  • 1
  • 16
  • 45
  • Not using font files directly. It would involve quite a bit of handwork. On the other hand, if you have glyph examples based on plain strokes (as opposed to filled outlines) it could be done along the lines of this answer: https://tex.stackexchange.com/a/474914 . – AlexG Jul 16 '20 at 11:14
  • Done! However, there are several unnecessary points which you need fix by yourself ... :-) –  Aug 01 '20 at 10:05

1 Answers1

12

Finished.

import animate;

settings.tex="xelatex"; settings.outformat="pdf"; texpreamble("\usepackage{CJK} \usepackage{fontspec} \setmainfont{Arial Unicode MS} \AtBeginDocument{\begin{CJK}{UTF8}{name}} \AtEndDocument{\clearpage\end{CJK}}"); animation Ani; unitsize(1cm); path[] Asymptote=texpath("あ"); // pen[] p={red,green,blue}; /* for (int i=0; i <Asymptote.length; ++i) { draw(Asymptote[i],p[i]); } */ pair[] a,b,c; pair labdira,labdirb,labdirc;

for(int j=0;j<size(Asymptote[0]);++j){ a.push(point(Asymptote[0],j)); } for(int j=0;j<size(Asymptote[1]);++j){ b.push(point(Asymptote[1],j)); } for(int j=0;j<size(Asymptote[2]);++j){ c.push(point(Asymptote[2],j)); }

path p1=subpath(Asymptote[0],21,22)--subpath(Asymptote[0],25,26); path p2=reverse(subpath(Asymptote[0],19,20))--reverse(subpath(Asymptote[0],27,28)); path firstpath; for(real r=0; r<20; ++r){ save(); firstpath=reverse(subpath(p2,0,reltime(p2,r/20)))--subpath(Asymptote[0],20,21)--subpath(p1,0,reltime(p1,r/20))--cycle; fill(firstpath, (r != 0) ? black : invisible); Ani.add(); restore(); } fill(reverse(subpath(p2,0,reltime(p2,1)))--subpath(Asymptote[0],20,21)--subpath(p1,0,reltime(p1,1))--cycle);

path q1=reverse(subpath(Asymptote[0],22,23))--reverse(subpath(Asymptote[0],18,19)) --subpath(Asymptote[2],1,0)--reverse(subpath(Asymptote[0],12,13)); path q2=subpath(Asymptote[0],24,25)--subpath(Asymptote[0],28,29) --subpath(Asymptote[1],2,3)--subpath(Asymptote[0],10,11); path secondpath;

for(real r=0; r<20; ++r){ save(); secondpath=reverse(subpath(q1,0,reltime(q1,r/20)))--subpath(Asymptote[0],23,24)--subpath(q2,0,reltime(q2,r/20))--cycle; fill(secondpath,(r != 0) ? black : invisible); Ani.add(); restore(); } fill(reverse(subpath(q1,0,reltime(q1,1)))--subpath(Asymptote[0],23,24)--subpath(q2,0,reltime(q2,1))--cycle);

pair A=b[0]+2dir(subpath(Asymptote[1],3,4)); pair B=a[9]+2dir(reverse(subpath(Asymptote[0],9,10))); pair Aa=intersectionpoint(subpath(Asymptote[0],1,2),b[0]--A); pair Bb=intersectionpoint(subpath(Asymptote[0],1,2),a[9]--B);

path tr=subpath(Asymptote[1],4,3)--subpath(Asymptote[2],6,1) --subpath(Asymptote[1],2,0) --reverse(subpath(Asymptote[0],6,9)); path tr1=subpath(Asymptote[0],9,10) --subpath(Asymptote[0],13,18) --subpath(Asymptote[0],0,5); path kk; for (int i=0; i<=20; ++i){ save(); kk=reverse(subpath(Aa--tr,0,reltime(Aa--tr,i/20)))--Aa--Bb--subpath(Bb--tr1,0,reltime(Bb--tr1,i/20))--cycle; fill(kk,(i != 0 ) ? black : invisible); Ani.add(); restore(); }

erase(); Ani.movie(BBox(2mm,Fill(pink)));

enter image description here

Updated!

This is what you want!

Step 1:

settings.tex="xelatex";
settings.outformat="pdf"; 
texpreamble("\usepackage{CJK}
\usepackage{fontspec}
\setmainfont{Arial Unicode MS}
\AtBeginDocument{\begin{CJK*}{UTF8}{name}}
\AtEndDocument{\clearpage\end{CJK*}}");
unitsize(1cm);
path[] Asymptote=texpath("あ");
pen[] p={red,green,blue}; p.cyclic=true;

for (int i=0; i <Asymptote.length; ++i) { draw(Asymptote[i],p[i]); }

pair[] a,b,c; pair labdira,labdirb,labdirc;

for(int j=0;j<size(Asymptote[0]);++j){ a.push(point(Asymptote[0],j)); labdira=rotate(-90)dir(Asymptote[0],j); dot("$\scriptsize "+string(j)+"$",a[j],labdira); } for(int j=0;j<size(Asymptote[1]);++j){ b.push(point(Asymptote[1],j)); labdirb=rotate(-90)dir(Asymptote[1],j); dot("$\scriptsize "+string(j)+"$",b[j],labdirb); } for(int j=0;j<size(Asymptote[2]);++j){ c.push(point(Asymptote[2],j)); labdirc=rotate(-90)*dir(Asymptote[2],j); dot("$\scriptsize "+string(j)+"$",c[j],labdirc); }

enter image description here

Step 2:

import animate;

settings.tex="xelatex"; settings.outformat="pdf"; texpreamble("\usepackage{CJK} \usepackage{fontspec} \setmainfont{Arial Unicode MS} \AtBeginDocument{\begin{CJK}{UTF8}{name}} \AtEndDocument{\clearpage\end{CJK}}"); animation Ani; unitsize(1cm); path[] Asymptote=texpath("あ"); pen[] p={red,green,blue};

for (int i=0; i <Asymptote.length; ++i) { draw(Asymptote[i],p[i]); }

pair[] a,b,c; pair labdira,labdirb,labdirc;

for(int j=0;j<size(Asymptote[0]);++j){ a.push(point(Asymptote[0],j)); /labdira=rotate(-90)dir(Asymptote[0],j); dot("$\scriptsize "+string(j)+"$",a[j],labdira);/ } for(int j=0;j<size(Asymptote[1]);++j){ b.push(point(Asymptote[1],j)); /labdirb=rotate(-90)dir(Asymptote[1],j); dot("$\scriptsize "+string(j)+"$",b[j],labdirb);/ } for(int j=0;j<size(Asymptote[2]);++j){ c.push(point(Asymptote[2],j)); /labdirc=rotate(-90)dir(Asymptote[2],j); dot("$\scriptsize "+string(j)+"$",c[j],labdirc);*/ } picture pic1; pair Tmin=(a[21].x,a[20].y),Tmax=(a[27].x,a[26].y); path g1=subpath(Asymptote[0],19,22)--subpath(Asymptote[0],25,28)--cycle; for(real r=0; r<20; ++r){ save(); fill(pic1,g1); clip(pic1,box(Tmin,relpoint((Tmin.x,Tmax.y)--Tmax,r/20))); add(pic1); Ani.add(); restore(); } fill(g1);

picture pic2; pair Tmin=(min(Asymptote[0]).x,a[12].y),Tmax=max(Asymptote[0]); path g2=subpath(Asymptote[0],22,25)-- //subpath(Asymptote[0],28,0)-- a[28]--a[0]-- subpath(Asymptote[1],2,3)-- subpath(Asymptote[0],10,13)-- subpath(Asymptote[2],0,1)-- subpath(Asymptote[0],18,19)--cycle; for(real r=0; r<20; ++r){ save(); fill(pic2,g2); clip(pic2,box(relpoint((Tmin.x,Tmax.y)--Tmin,r/20),Tmax)); add(pic2); Ani.add(); restore(); } fill(g2);

picture pic3; path tr=subpath(Asymptote[1],4,3)--subpath(Asymptote[2],6,1) --subpath(Asymptote[1],2,0) --reverse(subpath(Asymptote[0],6,9)); path tr1=subpath(Asymptote[0],9,10) --subpath(Asymptote[0],13,18) --subpath(Asymptote[0],0,5); path kk; for (int i=0; i<=20; ++i){ save(); kk=reverse(subpath(tr,0,reltime(tr,i/20)))--b[0]--a[9]--subpath(tr1,0,reltime(tr1,i/20))--cycle; fill(pic3,kk); add(pic3); Ani.add(); restore(); }

erase(); Ani.movie(BBox(3mm,Fill(white)));

enter image description here

This is my consideration for keyword "A" with Asymptote.

As AlexG's comment: It would involve quite a bit of handwork.

Only for compare and checking purpose.

import animate;
settings.tex="pdflatex"; 
settings.outformat="pdf";

animation Ani; size(10cm);

path[] Asymptote=texpath(Label("A"));

pen[] p={red,green,blue}; p.cyclic=true;

for (int i=0; i <Asymptote.length; ++i) { draw(Asymptote[i],p[i]); } pair[] a,b; pair labdira,labdirb;

for(int j=0;j<size(Asymptote[0]);++j){ a.push(point(Asymptote[0],j)); /labdira=rotate(-90)dir(Asymptote[0],j); dot("$\scriptsize "+string(j)+"$",a[j],labdira);/ } for(int j=0;j<size(Asymptote[1]);++j){ b.push(point(Asymptote[1],j)); /labdirb=rotate(-90)dir(Asymptote[1],j); dot("$\scriptsize "+string(j)+"$",b[j],labdirb);/ }

pair M=intersectionpoint(subpath(Asymptote[0],0,1),b[0]--b[0]+(b[0]-b[2])); path d=subpath(Asymptote[0],intersect(subpath(Asymptote[0],0,1),b[0]--b[0]+(b[0]-b[2]))[0],11)--b[2]--b[0]--cycle; path q=b[0]--b[1]--subpath(Asymptote[0],12,20)--subpath(Asymptote[0],0,intersect(subpath(Asymptote[0],0,1),b[0]--b[0]+(b[0]-b[2]))[0])--cycle; //dot(M); pair K=min(Asymptote[0]),U=max(Asymptote[0]); draw(box(K,U));

picture pic1; for(real r=0; r<20; ++r){ save(); fill(pic1,d,red); clip(pic1,box(K,relpoint((U.x,K.y)--U,r/20))); add(pic1); Ani.add(); restore(); } fill(d,red); picture pic2; for(real r=0; r<20; ++r){ save(); fill(pic2,q,red); clip(pic2,box(relpoint((K.x,U.y)--K,r/20),U)); add(pic2); Ani.add(); restore(); } fill(q,red); pair Mi=(a[11].x,K.y),Ma=(a[12].x,U.y); picture pic3;

for(real r=0; r<=20; ++r){ save(); fill(pic3,(a[11]--b[2]--b[1]--a[12]--cycle),red); clip(pic3,box(Mi,relpoint((Mi.x,Ma.y)--Ma,r/20))); add(pic3); Ani.add(); restore(); }

erase(); Ani.movie(BBox(3mm,Fill(white)));

enter image description here