0

Risa/Asirで円を描く(Bezier曲線を用いてみたver)

6
0
$$$$

Risa/Asirで円を描くことを考える.
今回はBezier曲線を用いて円を描くことにする.

まず,コードを以下に示す.
引数には中心の座標と,円の半径を指定している.

      import("glib3.rr");
/*
https://postd.cc/bezier-curves/
*/

Glib_math_coordinate=1;
glib_window(-2,-2,2,2);
glib_clear();

def draw_bezier3(P,Q,R,S) {
    Step=0.01; T=0;
    X=P[0]*(1-T)^3+3*Q[0]*T*(1-T)^2+3*R[0]*T^2*(1-T)+S[0]*T^3;
    Y=P[1]*(1-T)^3+3*Q[1]*T*(1-T)^2+3*R[1]*T^2*(1-T)+S[1]*T^3;
    for (T=Step; T<=1.0; T += Step) {
        X2=P[0]*(1-T)^3+3*Q[0]*T*(1-T)^2+3*R[0]*T^2*(1-T)+S[0]*T^3;
        Y2=P[1]*(1-T)^3+3*Q[1]*T*(1-T)^2+3*R[1]*T^2*(1-T)+S[1]*T^3;
        glib_line(X,Y,X2,Y2 | color=0x0000ff);
        X=X2; Y=Y2;
    }
}


def draw_Circle2(C,R){
    P=deval(R*4*deval(dsqrt(2)-1)/3);
    P0=[deval(C[0]+R),deval(C[1])];
    P1=[deval(C[0]+R),deval(C[1]+P)];
    P2=[deval(C[0]+P),deval(C[1]+R)];
    P3=[deval(C[0]),deval(C[1]+R)];
    P4=[deval(C[0]-P),deval(C[1]+R)];
    P5=[deval(C[0]-R),deval(C[1]+P)];
    P6=[deval(C[0]-R),deval(C[1])];
    P7=[deval(C[0]-R),deval(C[1]-P)];
    P8=[deval(C[0]-P),deval(C[1]-R)];
    P9=[deval(C[0]),deval(C[1]-R)];
    P10=[deval(C[0]+P),deval(C[1]-R)];
    P11=[deval(C[0]+R),deval(C[1]-P)];
    draw_bezier3(P0,P1,P2,P3);
    draw_bezier3(P3,P4,P5,P6);
    draw_bezier3(P6,P7,P8,P9);
    draw_bezier3(P9,P10,P11,P0);
}


Glib_math_coordinate=1;
glib_window(-4,-4,4,4);
glib_clear();

draw_Circle2([0,0],2);
glib_flush();

end;
    

ターミナルで0が出る場合,;を$に置き換えることで解決できる.

投稿日:20201110

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

整数論に興味が出て勉強中 Soul,Disco,House,Danceが好き 吹奏楽と軽音やってました DJしてます Nittc -> Kobe Univ.

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中