🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

1725閲覧

[Processing for Python] 自作関数を使って線を描画したい

amber_snob

総合スコア30

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/10/05 05:29

編集2019/10/05 05:30

Processing for Pythonを使って線を描画するプログラムを書いています。
線は自作関数で表現しようと思っているのですが、
自作関数を使うとエラーが出てしまいます。(関数の定義をコメントアウトして既存関数のline()を使用するとしっかり描画されます。)

もし詳しい方がいらっしゃいましたら助けていただきたいです????

ソースコード

python

1size_x = 512 2size_y = 512 3r = 255 4g = 128 5b = 128 6x_0 = 0 7x_1 = 128 8y_0 = 0 9y_1 = 128 10 11 12def setup(): 13 size(size_x, size_y) 14 background(0) 15 16""" 17def draw(): 18 noSmooth() 19 stroke(r,g,b) 20 line(x_0, y_0, x_1, y_1) 21 22def line(x0, y0, x1, y1): 23 point(x0,y0) # How to plot a point. 24""" 25#size(100, 100) 26#background(0) 27setup() 28stroke(255) 29line(15, 25, 70, 90)

エラー内容

processing.app.SketchException: You can't call line() outside a function in "active mode".
at jycessing.mode.run.SketchRunner.convertPythonSketchError(SketchRunner.java:242)
at jycessing.mode.run.SketchRunner.lambda$2(SketchRunner.java:119)
at java.lang.Thread.run(Thread.java:748)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Pythonモードはほとんど使ったことがないのですけれど、実行の仕方で2つのモードがあって...

Static Modeってのがベタに(setup()やdraw()以外の)文を並べていくモード。

もひとつActive Mode、setup()とdraw()を定義して、勝手にそれらを呼び出して行く(最初に一度setup()、その後draw()を繰り返し)モード。逆に、それ以外の関数は直接は呼び出しません。

この2つが使い分けられてないのでエラーになっていると思われます。

Staticモードでは、setup()とdraw()を定義しないで、それ以外の文を並べていきます。例えば

Processing

1def line(x0, y0, x1, y1): 2 point(x0,y0) # How to plot a point. 3 4#setup()/draw()以外の文を直接呼び出す 5size(100, 100) 6background(0) 7stroke(255) 8i=5 9while i<100: 10 line(i, 25, 70, 90) 11 i=i+5

もしsetup()/draw()を使うなら、それの呼び出しはProcessingが勝手にやるので、そちらに任せます。また、setup()とdraw()以外の関数についても実行レベル(?)からの呼び出しは直接はしません。全てsetup()またはdraw()の中から(何段階かの関数呼び出しを経て)呼び出される形。

Processing

1size_x = 512 2size_y = 512 3r = 255 4g = 128 5b = 128 6x_0 = 10 #0,0に点を打たれても見にくいから別の場所にしたほうがいいと思う 7x_1 = 128 8y_0 = 20 9y_1 = 128 10 11 12def setup(): #勝手に呼び出される 13 size(size_x, size_y) 14 background(0) 15 16def draw(): #勝手に呼び出される 17 noSmooth() 18 stroke(r,g,b) 19 line(x_0, y_0, x_1, y_1) #関数はsetup()/draw()の中から呼ぶ 20 21def line(x0, y0, x1, y1): 22 point(x0,y0) # How to plot a point. 23 24#関数の呼び出しは直接書かない。forとかwhile,ifとかは直接書けるみたい。setup()の前に呼び出される様子(試すと動くけど、文法として保証されているか調べてない。print()とかは呼べてしまうのでいろいろありそう)

投稿2019/10/05 11:56

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amber_snob

2019/10/06 01:39

thkanaさん、ご回答ありがとうございます! setup(), draw()を呼び出さずに実行したところうまく描画できました! StaticModeとActiveModeの違いも合わせて教えてくださってありがとうございます。ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問