ヒルベルト曲線のプログラム(C言語)
私は画像の勉強をしています。それで従来の水平スキャンではなく2次元相関をたもったまま1次元配列に変換できるヒルベルトスキャンとBWT変換とエントロピー符号化を用いて圧縮する方法を勉強しています。しかしヒルベルトのほうができなくて困っています。
プログラムの実行結果でヒルベルト曲線通る座標を示すプログラムを教えてください。だいたいは書けましたがうまくいきません。プログラムは
#include<stdio.h>
int x,y;
main() {
int n;
void RUL(int n),DLU(int n),LDR(int n),URD(int,n);
scanf("%d",&n);
printf("#位相%dのヒルベルト曲線\n",n);
x=0; y=0;printf("%d\n",x,y);
RUL(n);printf("\n");
}
void RUL(int n) {
if(n<=0) {return;}
URD(n-1);x=x+1;printf("%d %d\n",x,y);
RUL(n-1);y=y+1;printf("%d %d\n",x,y);
RUL(n-1);x=x-1;printf("%d %d\n",x,y);
DLU(n-1);
}
void DLU(int n) {
if(n<=0) {return;}
LDR(n-1);y=y-1;printf("%d %d\n",x,y);
DLU(n-1);x=x-1;printf("%d %d\n",x,y);
DLU(n-1);y=y+1;printf("%d %d\n",x,y);
RUL(n-1);
}
void LDR(int n) {
if(n<=0) {return;}
DLU(n-1);x=x-1;printf("%d %d\n",x,y);
LDR(n-1);y=y-1;printf("%d %d\n",x,y);
LDR(n-1);x=x+1;printf("%d %d\n",x,y);
URD(n-1);
}
void URD(int n) {
if(n<=0) {return;}
RUL(n-1);y=y+1;printf("%d %d\n",x,y);
URD(n-1);x=x+1;printf("%d %d\n",x,y);
URD(n-1);y=y-1;printf("%d %d\n",x,y);
LDR(n-1);
}
です。それをBWT変換とエントロピー符号にかけ圧縮させその圧縮率を求めその後画像はちゃんと戻るかを調べるために復元のプログラムを書かないいけませんがそのプログラムがわかりません。教えてください。