XDrawArcs(display, d, gc, arcs, narcs)
Display *display;
Drawable d;
GC gc;
XArc *arcs;
int narcs;
%[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]% で指定される弧の場合、
長軸と短軸の原点は % [ x +^ {width over 2} , ~y +^ {height over 2} ]%
である。また、円や楕円の無限に細い軌跡は横軸とは
% [ x, ~y +^ {height over 2} ]% と
% [ x +^ width , ~y +^ { height over 2 }] % で交わり、縦軸とは
% [ x +^ { width over 2 } , ~y ]%
% [ x +^ { width over 2 }, ~y +^ height ]%
で交わる。
これらの座標は小数であり、離散的な座標には丸められない。
軌跡は数学的に厳密に定義すべきである。
幅 lw を持つ線の場合、塗りつぶしの輪郭線は、円/楕円の軌跡からの距離が
lw/2(これは小数になり得る) に等しい点からなる2つの無限に細い軌跡によっ
て与えられる。
弧の端点については、その円/楕円の接線に対する cap_style や join_style
と同じものが用いられる。
% [ ~x, ~y, ~width, ~height, ~angle1, ~angle2 ]% で指定される弧の場合、 この角度は実際には歪んでいる楕円の座標系で定義しなければならない(円の 場合には、角度と座標系は一致している)。 これらの角度とスクリーンの通常の座標系で表現される角度(分度器で測るよ うな角度)の関係は次式で表される。
% roman "skewed-angle" ~ = ~ atan left ( tan ( roman "normal-angle" ) * width over height right ) +^ adjust%
skewed-angle と normal-angle は範囲が % [ 0 , ~2 pi ]% のラジアン(64 で割った弧度ではない)で表される。この角度のアークタンジェントは範囲 % [ - pi over 2 , ~pi over 2 ] % を返す。また、adjust は以下の値を取 る。
%0% 通常の角度が % [ 0 , ~pi over 2 ]% の範囲にある場合 %pi% 通常の角度が % [ pi over 2 , ~{3 pi} over 2 ]% の範囲にある場合 %2 pi% 通常の角度が % [ {3 pi} over 2 , ~2 pi ]% の範囲にある場合
与えられた弧について、 XDrawArc と XDrawArcs は、1つのピクセルを1度しか描画しない。 正しく接続している2つの弧の幅が 0 より大きく、弧が交わっている場合に は、 XDrawArc と XDrawArcs は、1つのピクセルを1度しか描画しない。 そうでない場合、交わっている弧のピクセルは複数回描画される。 ある端点から時計周りに指定した弧と他方の端点から反時計周りに同じ角度を 指定した弧は、接続に違いが出る以外は同じピクセルを描画する。
ある弧の終点と次の弧の最初の点が一致した場合、2つの弧は正しく接続され る。 最初の弧の最初の点と最後の弧の最後の点が一致する場合、2つの弧は正しく 接続される。 1つの軸に 0 を指定すれば、水平な線か垂直な線を描くことができる。 角度は単に座標系に基づいて計算され、アスペクト比は無視される。
どちらの関数も以下の GC コンポーネントを使用する。 function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dash-list.
XDrawArc と XDrawArcs はエラー BadDrawable, BadGC, BadMatch を起こすことがある。
typedef struct { short x, y; unsigned short width, height; short angle1, angle2; /* 弧度 * 64 */ } XArc;
x, y メンバは符号付きの整数である。 width, height メンバは16ビットの符号なし整数である。 プロトコルはこれらの値について16ビットのフィールドしか持っていないので、 座標やサイズが16ビットの範囲を越えないように注意しなければならない。