2013-02-25 6 views
5

ライブラリ関数を使用せずに円を形成するポイントのセット(/ピクセルを設定) 。Cグラフィックスライブラリやその他のライブラリ関数を使用せずに点を描く/ピクセルを設定する方法

ここで、半径を指定した点の(x、y)座標を取得するのは簡単です。

for (x=-r; x <r; x=x+0.1) { 
     y = sqrt(r*r - x*x); 
     draw(x,y, 0, 0); 
    } 

しかし、いったんポイントがあると、実際にどのようにサークルを描くのが私にとって混乱しているのですか?

は、誰かが任意のリンク/参照を共有したり、これがどのように動作するかを説明してもらえ
void draw(float x, float y, float center_x, float center_y) { 
      //logic to set pixel given x, y and circle's center_x and center_y 
      // basically print x and y on the screen say print as a dot . 
      // u 'd need some sort of a 2d char array but how do you translate x and y 
      // to pixel positions 
    } 

グラフィックスライブラリを使用せずに、私はグラフィックライブラリを使用することができますが、私はあなたがそれを行うことができますどのように理解したいですか?

+3

どのような環境ですか? – JasonD

+4

「ドロー」を定義してください! 「ディスプレイに印刷する」という意味ならば、これは使用するシステムに非常に依存します。 –

答えて

6
char display[80][26]; 

void clearDisplay(void) { 
    memset(display, ' ', sizeof(display)); 
} 

void printDisplay(void) { 
    for (short row=0; row<26; row++) { 
    for (short col=0; col<80; col++) { 
     printf("%c", display[col][row]); 
    } 
    printf("\n"); 
    } 
} 


void draw(float x, float y, float center_x, float center_y) { 
    if (visible(x,y)) { 
    display[normalize(x)][normalize(y)] = '.'; 
    } 
} 

EDITH: あなたは、あなたの質問の多くを組み込むために、あなたのコメントを変更するので、私は私の答えビットを拡大していきます。

を使用すると、2組の座標を有する:これらは主にあなたのxとyである(世界地図又は電磁石顕微鏡上のフェムトメートルにスケーリングされた経度及び緯度等)

  • 世界座標
  • 表示座標:これらはNexus 7やNexus 10 Tabletのような物理的な寸法(ピクセルまたはペルまたはドット/インチ)のディスプレイデバイスの表現です。

ワールド座標をディスプレイのcoordiに変換するメトリックが必要ですnates。物事をもっと複雑にするには、表示することができないもの(ヨーロッパを表示したいときはアフリカのようなもの)をクリップするためのウィンドウ(ユーザーに表示したい世界の一部)が必要です。そして、あなたはあなたの世界があなたの表示座標に一致するように調整してズームすることもできます(表示する方法をヨーロッパの多く)

これらの指標と切り抜きが簡単な代数的変換され

  • ディスプレイ - する世界座標をズームように

表示-X +調整と:表示中心に世界的に中心を翻訳表示-X =世界のX *因子(画素femtometerまたはキロメートル)

  • を:座標。

  • +0

    ニース... - しかし、なぜ26ではない25またはそれ以上の24? – alk

    +0

    @alk:ちょうど数字、あなたは正しい、24はより良いかもしれない –

    2

    技術的にCには入出力機能が組み込まれていないので、難しい質問です。ファイルに書き込む場合でもライブラリが必要です。ある特定のシステムでは、リアルモードのDOSのように、ビデオメモリに直接アクセスし、そのメモリに値を書き込むことでピクセルを設定することができますが、現代のOSは実際にそのようになります。あなたは、ブートローダを書いて、OSなしでもっと許容されたCPUモードでプログラムを起動しようとすることもできますが、それは巨大なワームです。

    したがって、stdioライブラリのbim mimimumを使用すると、他の回答が示すようにasciiグラフィックスを使ってstdoutに書き込むことができます。あるいは、別の画像閲覧プログラムで見ることができるxbmのような単純なグラフィックス形式を出力できます。 。より良い選択肢は、形式です。

    円の描画部分については、古典的なBresenham algorithmを見てください。あまりにも多くの情報のために、Jim Blinnの第1章A Trip Down the Graphics Pipelineには、異なる円描画アルゴリズムが記載されています。

    関連する問題