TI/Klasy - ćwiczenia

Z Brain-wiki
Wersja z dnia 11:38, 16 kwi 2019 autorstwa Tgub (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 16 12:49:54 2019

@author: tgub
"""
import numpy as np
import pylab as py
tab=np.zeros((100,100))


class Punkt():
    def __init__(self,x,y):
        self.x=x
        self.y=y

class Odcinek():
    def __init__(self,a,b):
        self.a=a
        self.b=b
    def rysuj(self,tablica):
        dx=(self.b.x-self.a.x)
        dy=(self.b.y-self.a.y)
        if abs(dx)>=abs(dy):
            slope=dy/dx
            for x in np.linspace(self.a.x,self.b.x,abs(dx)+1):
                y= slope*(x-self.a.x)+self.a.y
                tablica[int(round(x)),int(round(y))]=1
        else:
            slope=dx/dy
            for y in np.linspace(self.a.y,self.b.y,abs(dy)+1):
                x= slope*(y-self.a.y)+self.a.x
                tablica[int(round(x)),int(round(y))]=1
    def dlugosc(self):
        return ((self.b.x-self.a.x)**2+(self.b.y-self.a.y)**2)**(0.5)
                
class Wielokat():
    def __init__(self,*args):
        self.points=args
        self.odcinki=[Odcinek(self.points[n],self.points[(n+1)%len(self.points)]) for n in range(len(self.points))]
    def rysuj(self,tab):
        for odc in self.odcinki:
            odc.rysuj(tab)
    def obwod(self):
        return sum([odc.dlugosc() for odc in self.odcinki])

k=Wielokat(Punkt(10,10),Punkt(40,10),Punkt(10,50))
k.rysuj(tab)
py.imshow(tab,cmap = py.cm.gray, interpolation = 'nearest')
py.show()
print(k.obwod())