5 svar
189 visningar
Arian02 behöver inte mer hjälp
Arian02 520
Postad: 13 sep 2021 00:49 Redigerad: 13 sep 2021 00:50

Tkinter

Jag har skapat en kod som då kan skapa cirklar, rektanglar och trianglar genom att endast ange koordinaterna samt färgerna på dem. Dock har jag ingen aning om hur jag ska börja med uppgiften. Det jag testade själv var endast att anropa flera figurer under main() för att manuellt skapa en julgran. Dock vet jag inte hur dem förväntar mig att blanda in for loopar. Tacksam för hjälp!

from tkinter import *

SIZE = 1000
WIDTH = 500
HEIGHT = 500


def fill_rectangle(coord1, coord2, color, img):
    # Skapa en for lopp som går igenom img x och y koordinater
    # fyll i x och y koordinater (pixlar) med hjälp av de 4 första parametrarna
    for y in range(coord1[1], coord2[1]):
        for x in range(coord1[0], coord2[0]):
            img.put(color, (x,y))



def triangle_fill(coord1, coord2, coord3, color, img):
    if coord3[0] < coord1[0]:
        for y in range(coord3[1], coord2[1]):                         
            for x in range(coord2[0], round(coord2[0]+((y-coord3[1])/(coord2[1]-coord3[1]))*((coord1[0]-coord2[0])))):        #Coord 1 = Spetsig punkt
                img.put(color, (x,y))                                                                                         #Coord 2 = rätvinkel punkt
                                                                                                                               #Coord 3 = högsta punkt
    
    if coord3[0] > coord1[0]:
        for y in range(coord3[1], coord2[1]):
            for x in range(coord2[0], round(coord2[0]-((y-coord3[1])/(coord2[1]-coord3[1]))*((coord2[0]-coord1[0]))), -1):    
                img.put(color, (x,y))
                                                                                                          
     


def circle_fill(r, a, b, color, img):
    for x in range(a-r, a+r):
        for y in range(b-round((r**2-((x-a)**2))**(1/2)), b+round((r**2-((x-a)**2))**(1/2))):
            img.put(color, (x,y))



def main():
    window=Tk()
    canvas = Canvas(window, width=SIZE, height=SIZE, bg="#FFFFFF")
    canvas.pack()                                                               
    img = PhotoImage(width=SIZE, height=SIZE)
    canvas.create_image((WIDTH, HEIGHT), image=img, state="normal")
    fill_rectangle((450,600), (550,900),"#964b00", img)
    triangle_fill((800,600), (500,600), (500,400), "#006400", img)
    triangle_fill((730,500), (500,450), (500,250), "#006400", img)
    triangle_fill((670,400), (500,300), (500,100), "#006400", img)
    triangle_fill((200,600), (500,600), (500,400), "#006400", img)
    triangle_fill((270,500), (500,450), (500,250), "#006400", img)
    triangle_fill((340,400), (500,300), (500,100), "#006400", img)
    circle_fill(30, 800, 600, "#FF0000", img)
    circle_fill(30, 730, 450, "#000080", img)
    circle_fill(30, 660, 300, "#FF0000", img)
    circle_fill(30, 200, 600, "#FF0000", img)
    circle_fill(30, 270, 450, "#000080", img)
    circle_fill(30, 340, 300, "#FF0000", img)
    circle_fill(60, 500, 100, "#FFFF00", img)
  

    
    mainloop()





if __name__ == '__main__':
    main()
Laguna 30422
Postad: 13 sep 2021 07:26

Hur ser granen ut nu?

De sex trianglarna kan du ha i en for-loop, med bara ett triangelanrop, och låta hörnpunkterna bero av loop-variabeln.

Arian02 520
Postad: 13 sep 2021 11:13 Redigerad: 13 sep 2021 11:41

Såhär ser den ut, fast jag är extremt osäker på hur jag får in allt i en for loop och vad variabeln ska vara. Hur kan jag ansätta parametrarna i mina anrop utan att skriva in dem manuellt? Mina triangel koordinater skiljer sig rätt mycket och det låter väldigt svårt att kunna få dem exakta koordinaterna med en enda for loop 

Laguna 30422
Postad: 13 sep 2021 12:34

Trianglarna har lite olika form nu. Men om man ger dem samma form, så kan man uttrycka deras översta hörn som t.ex. (500, 200 + 150*i) där i får gå från 1 till 3. Och vänstra hörnet blir nånting i stil med (500 - 100*i, 200 + 200*i). Du får experimentera lite.

Arian02 520
Postad: 13 sep 2021 12:38

Med samma form menar du att de har samma höjd och bas. Men hur blir det då isåfall? Blir det typ

 

for i in range(1, 3):

     triangle_fill((500, 100+i),(200,300+i),(100,200i))

 

Men hur gör jag med mina färger och img som är parametrar, hur får jag in dem

Arian02 520
Postad: 13 sep 2021 13:00

Lyckades lösa det nu :) Tack Laguna!

Svara
Close