新しく発言する  EXIT  インデックスへ

Linux版でflood関数が使えない


  Linux版でflood関数が使えない 島村1243 2008/04/19 22:14:47 
  PAINT,FLOODはWindows版でのみ使えます。 白石 和夫 2008/04/20 06:47:23 
   └有難うございました。 島村1243 2008/04/20 09:41:39 
    └簡易ペイント処理を作成する。 山中和義 2008/04/20 10:10:19 
     └重いので、安直な方策をとりました。 島村1243 2008/04/20 11:29:08  (修正1回)

  Linux版でflood関数が使えない 島村1243 2008/04/19 22:14:47   ツリーへ
Linux版でflood関数が使えない  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/04/19 22:14:47
投稿105ページに有る、山中さんが(2008/03/08 14:38:52)作られた「論理演算や集合演算の計算して、その結
果を真理値表やベン図で表す」プログラムコードをコピペして、Win98上のBASIC-7.2.1とLinux(Fedora7)
上のBASIC-6.5.2でrunしてみました。

Win98のBASICではトラブル無しでベン図作成が行われましたが、Linux版では「文法の誤り。FLOODはここ
に書けません。」と言う警告ダイアログが表示されrun出来ませんでした。
問題の生じたプログラムコードは下記の場所です。

「SUB Venn(m$) !真理値表ビットパターンからベン図へ(Venn's Diagram)」
の下記FORループ中に有るflood関数

FOR i=1 TO 2^N

READ x,y

IF VAL(m$(i:i))=1 THEN flood x,y !塗りつぶし <----ここのfloodです!!

NEXT i

がダメでした。Linux版BASICアプリの仕様なら諦めざるを得ないのですが、チェックをして頂ければ有難いです。
  PAINT,FLOODはWindows版でのみ使えます。 白石 和夫 2008/04/20 06:47:23   ツリーへ
Re: Linux版でflood関数が使えない  返事を書く  ノートメニュー
白石 和夫 <fbdfvqwhki> 2008/04/20 06:47:23
PAINT,FLOODはWindows版でのみ使えます。
OS間の仕様の違いを
http://hp.vector.co.jp/authors/VA008683/basi0000.htm
にまとめてあるので,参考にしてください。
   └有難うございました。 島村1243 2008/04/20 09:41:39   ツリーへ
Re: PAINT,FLOODはWindows版でのみ使えます。  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/04/20 09:41:39
有難うございました。

仕様表が有るのに気付かず、白石先生にお手数をお掛けしてしまい申し訳有りませんでした。
    └簡易ペイント処理を作成する。 山中和義 2008/04/20 10:10:19   ツリーへ
Re: 有難うございました。  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/20 10:10:19
簡易ペイント処理を作成する。
ただし、大きな領域の場合、(BASICの)システムのスタックがオーバーフローする可能性があります。


SUB fill(x,y,c) !塗りつぶし
SET POINT STYLE 1 !ドットの形
SET POINT COLOR c !塗りつぶす色

ASK PIXEL VALUE (x,y) ac !領域の色
PLOT POINTS: x,y !塗りつぶす

ASK PIXEL VALUE (worldx(pixelx(x)+1),y) tc !右
IF tc=ac THEN CALL fill(worldx(pixelx(x)+1),y,c)

ASK PIXEL VALUE (worldx(pixelx(x)-1),y) tc !左
IF tc=ac THEN CALL fill(worldx(pixelx(x)-1),y,c)

ASK PIXEL VALUE (x,worldy(pixely(y)+1)) tc !上
IF tc=ac THEN CALL fill(x,worldy(pixely(y)+1),c)

ASK PIXEL VALUE (x,worldy(pixely(y)-1)) tc !下
IF tc=ac THEN CALL fill(x,worldy(pixely(y)-1),c)
END SUB




塗りつぶしの部分は、

IF VAL(m$(i:i))=1 THEN CALL fill(x,y,4) !塗りつぶし

とする。
     └重いので、安直な方策をとりました。 島村1243 2008/04/20 11:29:08  (修正1回)  ツリーへ
Re: 簡易ペイント処理を作成する。  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/04/20 11:29:08 ** この記事は1回修正されてます
重いので、安直な方策をとりました。

山中さん、早速のご教示有難うございました。
ご提示頂きましたコードを早速実行してみましたが、
塗り速度が極めて遅く、PCがマウス操作を受け付けなく
なる程でした。

そこで、線で囲まれた該当エリア全体を塗るのは諦めて
「該当エリアに赤丸印を付ける」と言う下記の様な安直な方法にしました。

FOR i=1 TO 2^N
READ x,y
IF VAL(m$(i:i))=1 THEN
SET AREA COLOR "red" !該当エリアに赤丸印を表示
DRAW disk WITH SCALE(0.05)*SHIFT(x,y)
END IF
NEXT i

テクニック的にはお恥ずかしい限りですが、ベン図が意
味する所は(個人的に)これで理解できるので、当面こ
れで使わせて頂きます。
電気のロジックシーケンス(論理回路)動作を調べる上
で非常に有益なソフトをご提示くださいまして、本当に
有難うございます。

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。