2017-01-18 19 views
0

Processing for Pythonを使用して、フラクタル揺れ線を描画するプログラムを作成しています。円弧関数は何も描画されていません。arc()は処理3で描画されていません。

size(400,400) 
noFill() 
strokeCap(SQUARE) 
import copy 
roadcolour=(255,255,255) 
edgecolour=(0,0,0) 
roadwidth=10 
edgewidth=1 
coords=(100,100) 
h=0 

class Straight: 

    def __init__(self,l): 
     self.l=l 

    def sketch(self): 
     newcoords=(coords[0]+(cos(radians(h))*self.l),coords[1]+(sin(radians(h))*self.l)) 
     strokeWeight(roadwidth+edgewidth) 
     stroke(*edgecolour) 
     line(coords[0],coords[1],newcoords[0],newcoords[1]) 
     strokeWeight(roadwidth) 
     stroke(*roadcolour) 
     line(coords[0],coords[1],newcoords[0],newcoords[1]) 
     return newcoords,h 

class Arc: 

    def __init__(self,direction,degs,r): 
     self.r=r 
     self.dir=direction 
     self.degs=degs 

    def sketch(self): 
     if self.dir=="R": 
      centre=(coords[0]+(cos(radians(h+90))*self.r),coords[1]+(sin(radians(h+90))*self.r)) 
      starth=(h-90)%360 
      endh=(starth+self.degs)%360 
      newcoords=(centre[0]+(cos(radians(endh))*self.r),centre[1]+(sin(radians(endh))*self.r)) 
     else: 
      centre=(coords[0]+(cos(radians(h-90))*self.r),coords[1]+(sin(radians(h-90))*self.r)) 
      endh=(h+90)%360 
      starth=(endh-self.degs)%360 
      newcoords=(centre[0]+(cos(radians(starth))*self.r),centre[1]+(sin(radians(starth))*self.r)) 
     centre=roundcoords(centre) 
     newcoords=roundcoords(newcoords) 
     print(centre,starth,endh,newcoords) 
     strokeWeight(roadwidth+edgewidth) 
     stroke(*edgecolour) 
     arc(centre[0],centre[1],self.r*2,self.r*2,radians(starth),radians(endh)) 
     strokeWeight(roadwidth) 
     stroke(*roadcolour) 
     arc(centre[0],centre[1],self.r*2,self.r*2,radians(starth),radians(endh)) 
     return newcoords,h 

def roundcoords(coords): 
    return (int(coords[0]+0.5),int(coords[1]+0.5)) 

a=Arc('R',90,100) 
a.sketch() 
s=Straight(100) 
s.sketch() 

私はこのコードを実行すると、所望のように、直線は、このように、黒エッジと、完全に描画:

the output

及びプログラム出力((100, 200), 270, 0, (200, 200))予想通り。

ただし、わかるように、円弧は描かれません。プログラムは中断しません。アークは単純に描画されません。なぜですか、どうすれば修正できますか?

答えて

1

私はこれはstarth < endhがあなたの例では当てはまらないことを保証する必要があるからだと思います。

代わりに、あなたはこれらの2つの円弧の1を描くことができます:

arc(centre[0],centre[1],self.r*2,self.r*2,radians(endh),radians(starth))  
arc(centre[0],centre[1],self.r*2,self.r*2,radians(starth),2*PI+radians(endh)) 

は、私はそれはあなたの問題を解決することを願っています:)

+0

それは今完璧に動作、どうもありがとうございました! –

関連する問題