掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28178

画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(2006/09/15 20:53:49)


どうしても分からなくて、教えてください。
Line関数がない環境で(文字は表示できます。)、
画面に「1」で線を引こうとしているのですが、
ロジックを教えてください。(T_T
関数の引き数は、以下のイメージで、
line(5,1,1,5)
出力イメージとしては、以下のようなイメージです。
XY[12345]
[1]00001
[2]0001
[3]001
[4]01
[5]1
よろしくお願いします。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。 28179 nano 2006/09/15 20:55:37
<子記事> Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。 28181 Blue 2006/09/15 21:08:41


No.28179

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---nano(2006/09/15 20:55:37)


>関数の引き数は、以下のイメージで、
>line(5,1,1,5)

各引数の意味を教えてください。


この投稿にコメントする

削除パスワード

No.28180

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(2006/09/15 21:00:53)


>>関数の引き数は、以下のイメージで、
>>line(5,1,1,5)
>各引数の意味を教えてください。
すみません、説明不足でした。
line(x1,y1,x2,y2)
開始座標 x1,y1 終了座標 x2,y2です。




この投稿にコメントする

削除パスワード

No.28181

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---Blue(2006/09/15 21:08:41)


とりあえず、掲示板ご利用上の注意ぐらい読んでください。

違反事項
>題名と投稿者名は具体的に書きます。
初心者というハンドルは、良くないものの1つ。

>環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
line関数ってなによ?環境依存じゃね?ってこと。
つまり、環境に「よってできること」「できないこと」がありますのでここを省かれると、
ピンポントな回答を得るのは難しいです。



この投稿にコメントする

削除パスワード

No.28182

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(raion)(2006/09/15 21:29:27)
http://ix2y-tnb.asablo.jp/blog/


すみません、他の記事をみて初心者でよいのかなと思って
甘えて、初心者って書いてしまいました。
開発環境に関しては、特殊なのとロジックの話なので、よいかなと勝手に思い込んでいました。
PSPのアプリケーション開発環境で、winXP ps2devでコンパイルしています。
Line関数がないので、自分で線を引くロジックを考えているのですが、
どうもうまく考えきれません(T_T;よろしくお願いします。



この投稿にコメントする

削除パスワード

No.28183

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---nano(2006/09/15 22:00:04)


>Line関数がないので、自分で線を引くロジックを考えているのですが、
>どうもうまく考えきれません(T_T;よろしくお願いします。

xとyは、ゼロ以下の値になることがありますか?
それとも、必ず1以上であることが保証されていますか?


この投稿にコメントする

削除パスワード

No.28184

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(raion)(2006/09/15 22:09:30)
http://ix2y-tnb.asablo.jp/blog/


>それとも、必ず1以上であることが保証されていますか?
保証します。
画面上で存在する位置のため、保証できます。
よろしくお願いします。


この投稿にコメントする

削除パスワード

No.28186

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---nano(2006/09/15 22:39:03)


サンプルを作ってみました。
仕様をすべて満たしているかどうかはわからないですが…。
#include <stdio.h>

void line(int x1, int y1, int x2, int y2);
void swap(int *a, int *b);

int main(void)
{
    line(15, 4, 7, 10);
    return 0;
}

void line(int x1, int y1, int x2, int y2)
{
    double katamuki, y_seppen;
    int x, y, yy;
    
    if (x1 != x2) {
        /* 2点間を結ぶ直線の傾きとy切片を求める */
        katamuki = (double) (y2 - y1) / (double) (x2 - x1);
        y_seppen = -katamuki * x1 + y1;
        
        swap(&x1, &x2);       /* x1 <= x2 になるようにする */
        for (x = 1; x <= x2; x++) {
            if (x < x1)       /* x1になるまで改行 */
                putchar('\n');
            else {
                yy = katamuki * x + y_seppen + 0.5; /* yの値に一番近い整数 */
                for (y = 1; y <= yy; y++)         /* そのときだけ1、他は0 */
                    putchar((y == yy) + '0');
                putchar('\n');
            }
        }
    }
    else {
        swap(&y1, &y2);       /* y1 <= y2 になるようにする */
        for (x = 1; x < x1; x++)                /* x1になるまで改行 */
            putchar('\n');
        for (y = 1; y <= y2; y++)            /* y1〜y2のときだけ1、他は0 */
            putchar((y >= y1) + '0');
        putchar('\n');
    }
}

void swap(int *a, int *b)
{
    if (*a > *b) {
        int t = *a;
        
        *a = *b;
        *b = t;
    }
}




この投稿にコメントする

削除パスワード

No.28187

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(raion)(2006/09/15 23:06:40)
http://ix2y-tnb.asablo.jp/blog/


ありがとうございます。
簡単な計算で出来るのかなと思っていたのですが、
全然難しい内容ですね。私にはこのロジックは作成出来ないです。(T_T;
しかもこんな短時間で、コメント入りでありがとうございます。
これから組み込んでみます。
本当にありがとうございます。



この投稿にコメントする

削除パスワード

No.28188

Re:画面に「1」で線を引こうとしているのですが、ロジックを教えてください。
投稿者---初心者(raion)(2006/09/16 14:17:30)
http://ix2y-tnb.asablo.jp/blog/


やっと実装できました。
考える基点が出来て、いろいろ考えることが出来ました。
ありがとうございます。

私の仕様提示が、あいまいで、分かりにくかったので
教えていただいた物と少し違う仕様のものになりましたが、
さらにいろいろ調べて、作成した結果を書き込みます。
詳細内容は、HPに書いています。

#pgPrint_aは、指定位置に文字を書く関数です。

void LineTo(int x1, int y1, int x2, int y2)
{
  int x,y;
  int ix1=x1*2,iy1=y1*2;
  int ix2=x2*2,iy2=y2*2;
  int iLen;
  if ((iy2-iy1)>(ix2-ix1))
  {
    for(y=iy1;y<=iy2;y=y+sgn(iy2-iy1)*2)
    {
      x=((ix2-ix1)*(y-iy1)/(iy2-iy1)+ix1)+1;
      pgPrint_a(x/2,y/2,COLOR_WHITE,"1");
    }
  }
  else
  {
    for(x=ix1;x<=ix2;x=x+sgn(ix2-ix1)*2)
    {
      y=((iy2-iy1)*(x-ix1)/(ix2-ix1)+iy1)+1;
      pgPrint_a(x/2,y/2,COLOR_WHITE,"2");
    }
  }
}


これで、ロジックの呪いか開放されて、ゲーム作りに励めそうです。(笑)



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧