2016-05-09 8 views
0

私は、pythonを使って画面上に線のパターンを描く効率的な方法を考えています。効率的にPythonを使って線を描く

これまで、私はLAser Spirographを動かすことができるいくつかのコードを一緒に冠しました。基本的には、互いに円周の移動点を中心に回転する3つの円です。これは、各サークルが回転している相対速度に応じて様々なパターンをトレースする一連のポイントを生成します。

私はx、yコードの長いリストを1行としてプロットしたいのですが、Pythonで(現在はPygamesで遊んでいます)一連のポイントを取得し、滑らかな曲線。

たとえば、私はこのlinkのパターンを記述する数百点を持っていると言います。スクリーンに完全なパターンを描画するためのPythonの「シンプルな」方法があります。私はこれが線の出現を得るために数千点のそれぞれをプロットしようとするよりも速いと仮定しています。

EDIT

私は機能に始点と終点プラス半径を渡すことで、画面に言う半円を描画するより高速な方法があるだろうと仮定されています。曲線上の2,000点を計算し、それらを点または短い直線として個別にプロットするのではなく、別のポイントとして同じラインを出力するよりも100ポイント長い直線をプロットする方が速いと私は考えていますか?

+0

[** 'pygame.draw.lines' **](http://www.pygame.org/docs/ref/draw.html#pygame.draw.lines) –

+0

こんにちは、私が理解しているように点の間の一連の線が平滑ではない点が続きます。例えば、3つの点は、2つの直線的な糸片と結合して、天使または1つの滑らかな曲線を形成することができる。私は曲線が欲しい。 – DevilWAH

+0

エンドポイントの接線と重さを定義する必要があります。カーブはどのような経路に従うべきですか? –

答えて

1

免責事項これは、あなたがカーブを望んでいない

上記の私のコメントに展開するには答え


ではありません。あなたは、画面上に描画されているものの知覚に粗いサンプリング対密度が高いの効果を見て

は、各
import numpy as np 
import matplotlib.pyplot as plt 

t = np.linspace(0, np.pi*3, 301) 
x = np.sin(t) 

認知

を欺くために十分な頻度で曲線をサンプリングする たい点(t[i], x[i])は、アプリケーションでは正弦曲線の点であり、ここでは複雑な曲線になっていますので、異なるサンプリングステップを使用してこれらの点をプロットして、サンプリングレートが描画されたものに対するあなたの認識に影響を与えるかどうかを見てみましょう。 ..

for step in (1, 25, 50): 
    plt.plot(t[::step], x[::step], label='step=%d'%step) 
#    ^^^^  ^^^^    
plt.ylim((-1.05, 1.05)) 
plt.legend(loc='best') 

とき、それは見かけだとして、それは直線セグメント(のシーケンスであっても、曲線のようにに見える描かれているものを十分に高いサンプリング・レートで、私はあえて言う私に

enter image description here

を与えることtxの他の2つの要因を見てください。

他のコメントでは、あなたがあなたの行為を行うために使用することができるpygames機能について教えられました。

+0

こんにちは、それを完全に出すための喝采、私のconsernは、曲線のいくつかの部分 "0.75-1.25"曲線がほぼ真っ直ぐであるため、適切なサンプリングレートを選択しようとしています。 1.25〜1.75の間に直線は曲線から明らかに逸脱しているはずである。私はこれに戻って良いかもしれませんが、よりベジェ曲線に見えます。 – DevilWAH

+1

正弦波が最大値に近くなると、曲率も最大値を持ちます。正弦波がゼロを横切るとき、曲率はゼロに近くなり、正弦曲線はほぼ直線に近くなります。両方の地域でequisampling WORKSを使用します。いずれにしても、私はあなたに納得させることができないと感じているので、私はあなたを説得するためにさらに努力しません。チャオ – gboffi

関連する問題