ペア/ポイントをパスの長さに沿ったペア/ポイントとして定義する METAPOST

ペア/ポイントをパスの長さに沿ったペア/ポイントとして定義する METAPOST

指定された長さのパスに沿ったポイントとしてペアを定義することは可能ですか?

例えば

beginfig
u=2cm;
path x;
x=(0,0)..u*dir(225);
%v= a point along a fraction of the length of x in a specific direction 
endfig 

答え1

平行MetaPost の Metafun 形式で定義された演算子は、パスの一部である点を指定します。

beginfig(1);
  u=2cm;
  path x; x=(0,0)..u*dir(225); draw x;
  pair v; v = point .3 along x;
  dotlabel.lrt(btex v etex, v);
endfig;
end.

フラグを使用してコンパイルしますmem:mpost --mem=metafun yourfile.mp結果:

ここに画像の説明を入力してください

代わりに、mp-tool.mpiiプログラムの先頭でパッケージをロードすることもできます (ただし、その場合、透明性などの Metafun の全機能を利用できなくなります)。

input mp-tool.mpii;

あるいは、フォーマットに忠実に従いたい場合は、演算子を自分でplain定義することもできます。alongMetafun マニュアル、61ページ:

primarydef pct along pat = 
  (arctime (pct * (arclength pat)) of pat) of pat
enddef;

Metafun形式(マニュアル参照、61ページ)では、の上次元を持つ点の位置を指定する演算子が定義されています。

primarydef len on pat =
  (arctime len of pat) of pat 
enddef;

これを私たちのプログラムに適用すると、同じ結果を得るために次のように使用されます。

beginfig(1);
  u=2cm;
  path x; x=(0,0)..u*dir(225); draw x;
  pair v; v = point .6cm on x;
  dotlabel.lrt(btex v etex, v);
endfig;
end.

関連情報