Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Βοήθεια σε θέματα διπλωματικής - Python & Color gradient

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2259

  • vassilis
  • Το Άβαταρ του/της vassilis
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Έχω μεγάλο πρόβλημα με την εξέλιξη της διπλωματικής μου και θα ήθελα από κάποιον να με βοηθάει συστηματικά με μικρά κομμάτια κώδικα. είναι μεγάλη Ιστορία αλλά είμαι απελπισμένος για διάφορους λόγους με την διπλωματική μου και χρειάζομαι άμεσα βοήθεια. Χρειάζομαι να φτιάξω ένα μικρό πρόγραμμα το οποίο το μόνο που θα κάνει είναι χρωματική διαβάθμιση δύο χρωμάτων σε ένα σχήμα. Όποιος μπορεί να με βοηθήσει θα το εκτιμούσα πολύ

Βασίλης
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2260

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Καλησπέρα

Έτσι όπως το θέτεις, δύσκολα θα βρεθεί κάποιος να σε βοηθήσει. Γράψε συγκεκριμένα το πρόβλημα σου. Δώσε τον κώδικα που έχεις γράψει, το πρόβλημα που συνάντησες κτλ.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2261

  • vassilis
  • Το Άβαταρ του/της vassilis
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
καταρχάς ευχαριστώ για την απάντησή σου.
Μέχρι τώρα έχω φτιάξει μερικά προγραμματάκια σε Java και το opens source πρόγραμμα Processing. τα προγραμματάκια αυτά δεν κάνουν κάτι το ιδιαίτερο απλά την χρωματική διαβάθμιση δυο χρωμάτων. Αλλά επειδή πλέον πρέπει να εφαρμόσω σε ένα σχήμα την χρωματική διαβάθμιση είπα να ασχοληθώ με την python. Έχω βρει κάποια πράγματα στο διαδίκτυο αλλά ξεφεύγουν πραγματικά πολύ από τις ανάγκες μου γενικά είναι πολύπλοκα. Μια πολύ καλή σελίδα η οποία περιγράφει και από θεωρητική πλευρά την χρωματική διαβάθμιση είναι η παρακάτω:
[url=http://http://bensouthgate.com/p/12_3_13.php]Constructing Color Gradients with Python[/url]

Δύο προγράμματα που μου έχουν τραβήξει την προσοχή είναι τα παρακάτω.
x1 = self.drawing_area[0]
x2 = x1 + self.drawing_area[2]
a, b = self.background_color, self.background_gradient
y1 = self.drawing_area[1]
y2 = y1 + self.drawing_area[3]
h = y2-y1
rate = (float((b[0]-a[0])/h),
         (float(b[1]-a[1])/h),
         (float(b[2]-a[2])/h)
         )
for line in range(y1,y2):
     color = (min(max(a[0]+(rate[0]*line),0),255),
              min(max(a[1]+(rate[1]*line),0),255),
              min(max(a[2]+(rate[2]*line),0),255)
              )
     pygame.draw.line(self.image,color,(x1,line),(x2,line))

και

def fill_gradient(surface, color, gradient, rect=None, vertical=True, forward=True):
    if rect is None: rect = surface.get_rect()
    x1,x2 = rect.left, rect.right
    y1,y2 = rect.top, rect.bottom
    if vertical: h = y2-y1
    else:        h = x2-x1
    if forward: a, b = color, gradient
    else:       b, a = color, gradient
    rate = (
        float(b[0]-a[0])/h,
        float(b[1]-a[1])/h,
        float(b[2]-a[2])/h
    )
    fn_line = pygame.draw.line
    if vertical:
        for line in range(y1,y2):
            color = (
                min(max(a[0]+(rate[0]*(line-y1)),0),255),
                min(max(a[1]+(rate[1]*(line-y1)),0),255),
                min(max(a[2]+(rate[2]*(line-y1)),0),255)
            )
            fn_line(surface, color, (x1,line), (x2,line))
    else:
        for col in range(x1,x2):
            color = (
                min(max(a[0]+(rate[0]*(col-x1)),0),255),
                min(max(a[1]+(rate[1]*(col-x1)),0),255),
                min(max(a[2]+(rate[2]*(col-x1)),0),255)
            )
            fn_line(surface, color, (col,y1), (col,y2))

Θα με διευκόλυνε για αρχή να τρέξω τον παραπάνω κώδικα, αλλά λόγο του ότι δεν ξέρω πολλά και δεν ξέρω τι ακριβώς πρέπει να προσθέσω για να είναι εκτελέσιμο. Στην συνέχεια θα προσπαθήσω να παραμετροποιήσω τον κώδικα για να τον φέρω στα μέτρα μου.
Τελευταία διόρθωση: 10 Χρόνια 3 Μήνες πριν από vassilis.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2262

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Πρώτα απ' όλα και τα δύο προγράμματα, χρησιμοποιούν τη βιβλιοθήκη pygame.
Πρέπει να το εγκαταστήσεις και κατόπιν να προσθέσεις στον κώδικα των προγραμμάτων:

import pygame

Δες και αυτό αν βοηθάει: Color of the drawn gradient is always uniform
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": vassilis

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2263

  • Asotos
  • Το Άβαταρ του/της Asotos
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 22
  • Ληφθείσες Ευχαριστίες 9
Η (γλώσσα) Processing είναι ιδανική γι' αυτό που θες να κάνεις (και είναι και πολύ εύκολη). Αν δεν έχει άλλες προγραμματιστικές απαιτήσεις το project σου, αντί να αγχώνεσαι και να τρέχεις από τη μια γλώσσα στην άλλη κάτσε ήρεμα και μάθε μία αρκετά καλά, ώστε να καταλαβαίνεις τι κάνεις.

Αυτό που θες να κάνεις, μπορείς να το κάνεις μόνος σου σε 2 ώρες ως εξής:

1 ώρα, παρακολούθησε αυτό: http://hello.processing.org/

+1 ώρα (ή λιγότερο): Γράψε στο google "processing gradient" και κάνε αντιγραφή και προσαρμογή του κώδικα που θα βρεις (π.χ. εδω: http://processing.org/examples/lineargradient.html, ή εδω: http://processing.org/examples/radialgradient.html)


Αν θες πάντως σε python αυτό που ζητάς, ο κώδικας που αναφέρει ο kamar, με κάποιες μικροαλλαγές και κάποιες σημειώσεις για να σε βοηθήσουν, είναι ο εξής:

# -*- coding: utf-8 -*-
 
# TKinter είναι μια βιβλιοθήκη που μας επιτρέπει να φτιάχνουμε γραφικά
# περιβάλλοντα. Σε αντίθεση με την pygame, δεν χρειάζεται να την εγκα-
# ταστήσεις εσύ. Την περιέχει ήδη η python.
import Tkinter
 
 
# Εδώ ορίζουμε μια κλάση (class) που θα την καλέσουμε παρακάτω, στη γραμμή
# που λέει: app = testGUI(root)
class testGUI:
    def __init__(self, root):
        # Εδώ φτιάχνεται ο canvas. Όπως λέει και η λέξη, canvas είναι το φόντο,
        # το background πάνω στο οποίο "ζωγραφίζουμε". Σε αυτή την περίπτωση
        # σημαίνει το ίδιο το παράθυρο. Τα keyword arguments bg, width και
        # height αναφέρονται, αντίστοιχα, στο χρώμα, το πλάτος και το ύψος του
        # παραθύρου.
        C = Tkinter.Canvas(root, bg="white", width=800, height=600)
 
        # Εδώ καλούμε μία συνάρτηση (function) που την ορίζουμε λίγο παρακάτω
        self.drawGradient(C, 0, 0, 800, 600)
        C.pack()
 
    # Εδώ ορίζουμε τη συνάρτηση που θα φτιάξει τη διαβάθμιση (gradient) πάνω
    # στον καμβά. x και y είναι οι αρχικές συντεταγμένες. w και h είναι το
    # πλάτος και το ύψος. Πιο πάνω που καλούμε τη συνάρτηση φαίνεται τι τιμές
    # τους δίνουμε.
    def drawGradient(self, canvas, x, y, w, h):
        # Εδώ κανονικοποιούμε τις τιμές των R,G,B (βλ. παρακάτω) σε σχέση με
        # το πλάτος που δώσαμε παραπάνω (w), για να μπορούμε να "μοιράσουμε"
        # τη διαβάθμιση σε όλο το πλάτος.
        factor = 255. / w
 
        # Εδώ φτιάχνουμε τη λούπα (loop) που θα φτιάξει τη διαβάθμιση
        for offset in range(0, w):
            # Εδώ σε κάθε επανάληψη της λούπας ορίζουμε άλλο χρώμα για να τυπω-
            # θεί στον καμβά. Η μορφή στην οποία δίνουμε το χρώμα είναι η RGB.
            # Καθένα από τα "%02x" αντικαθίσταται από την αντίστοιχη τιμή στην
            # παρένθεση (το x σημαίνει ότι αντικαθίσταται σε δεκαεξαδική μορφή).
            # Επειδή οι RGB τιμές που δίνουμε είναι της μορφής R=G=B, τελικά
            # παίρνουμε αποχρώσεις από το λευκό ως το μαύρο (γκρι).
            gradColor = '#%02x%02x%02x' % (offset*factor, offset*factor, offset*factor)
 
            # Εδώ γίνεται ουσιαστικά το "τύπωμα". Μία γραμμή κάθετη για κάθε
            # επανάληψη της λούπας.
            canvas.create_line(x + offset, y, x + offset, y + h, fill=gradColor)
 
 
# Εδώ τρέχει το κυρίως πρόγραμμα
root = Tkinter.Tk()
app = testGUI(root)
root.mainloop()
 

Tο παραπάνω script φτιάχνει ένα gradient με ακραίες τιμές το μαύρο και το λευκό. Αν θες το πρόγραμμά σου να φτιάχνει gradients για τυχαίες ακραίες τιμές θα πρέπει να τροποποιήσεις τον παραπάνω κώδικα ώστε το gradcolor (που παίρνει σε κάθε επανάληψη της λούπας μια τιμή της μορφής #RRGGBB, όπου R,G,B δεκαεξαδικοί αριθμοί και R = G = B ) να παίρνει τιμές στο R, στο G και στο Β διαφορετικές μεταξύ τους.

Αν π.χ. οι ακραίες σου τιμές είναι το κόκκινο (#FF0000) και το λευκό (#FFFFFF), το R θα πρέπει να παίρνει τιμές από F έως F στη διάρκεια της λούπας, το G από 0 έως F και το B από 0 έως F.
Τελευταία διόρθωση: 10 Χρόνια 3 Μήνες πριν από Asotos.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": vassilis

Βοήθεια σε θέματα διπλωματικής - Python & Color gradient 10 Χρόνια 3 Μήνες πριν #2265

  • vassilis
  • Το Άβαταρ του/της vassilis
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Καταρχάς ευχαριστώ πολύ για την ανταπόκριση σας.
Στο Processing τα έχω έτοιμα, τα gredient και με "μαθηματική" ακρίβεια για τα χρώματα. Απλά επειδή στην συνέχεια χρειάζομαι να εφαρμόσω χρωματική διαβάθμιση σε ακανόνιστο σχήμα λίγο πελάγωσα και με πιέζει σημαντικά ο χρόνος. Μου φάνηκε πιο εύκολο το να μεταφερθώ σε Python. Θεώρησα ότι η δημιουργία χρωματικής διαβάθμισης σε ακανόνιστο σχήμα θα ήταν πιο εύκολη και γενικά θα έβρισκα καλύτερη βοήθεια. Αλλά επαναλαμβάνω στο Processing έχω φτάσει σε κάποιο σημείο καλό. Τέσπα θα δοκιμάσω και στα δύο την δημιουργία σχημάτων και θα καταλήξω σε ένα από τα δύο. θα δοκιμάσωκαι την Pytohn και θα επανέλθω για διευκρινίσεις.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.295 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου