Discuss Scratch

Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

Comment peut-on dessiner en vecteur avec l'extension stylo?
Un peu comme ça:
créer une forme avec contour (::#000000) et remplissage (::#FFFFFF)::pen cat
point à x:(50) y:(50) avec vecteurs x1:(34) y1:(64) x2:(56) y2:(86)::pen
point à x:(50) y:(0) avec vecteurs x1:(43) y1:(45) x2:(86) y2:(16)::pen
point à x:(0) y:(50) avec vecteurs x1:(846) y1:(75) x2:(7865) y2:(5)::pen
wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Salut,

Je ne peux t'aider que pour les contours : pour réaliser des courbes, tu peux utiliser la méthode Smoothstep, dont voici le principe de l'algorithme :
def curveSmoothstep(p1 : 'Point', p2 : 'Point', p3 : 'Point'):
    """Courbe par Smoothstep. La courbe passe par p1, p2, et est dirigée par p3."""
    maxStep : int = 200
    for currentStep in range(0, maxStep +1):  #de 0 à maxStep inclus
        pA = mixLines(p1, p3, (step / (maxStep)) )
        pB = mixLines(p2, p3, (step / (maxStep)) )
        pC = mixLines(pA, pB, (step / (maxStep)) )
        goto(pC.x, pC.y)
 
def mixLines(p1 : 'Point', p2 : 'Point', percent) -> 'Point':
    """Retourne A le point de coordonnées ( p1.x * percent + p2.x * (percent - 1) )
                                          ( p1.y * percent + p2.y * (percent - 1) ) """
S'il faut que je détailles plus cet algorithme, n'hésite pas à demander.
Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

ça donne quoi en scratch?
désolé je ne connais que le scratch

Last edited by Lu_Li_49 (March 7, 2025 20:53:53)

wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

C'est censé être du pseudo code

Tu as besoin de deux blocs personnalisés : un correspondant à la définition de mixLines et l'autre à celle de curveSmoothstep

Si tu as vraiment besoin d'aide, j'ai trouvé ça (en français même si pas forcément bien expliqué, les schémas sont importants).

Edit : au passage, pour la culture G, la fonction "smoothstep" est une fonction définie sur utilisant deux courbes de bézier quadratiques et utilisée dans toutes les animations (web, jeux, etc).

Last edited by wilhelm43 (March 7, 2025 23:23:46)

Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

je bloque ici:
def mixLines(p1 : 'Point', p2 : 'Point', percent) -> 'Point':
    """Retourne A le point de coordonnées ( p1.x * percent + p2.x * (percent - 1) )
                                          ( p1.y * percent + p2.y * (percent - 1) ) """

Last edited by Lu_Li_49 (March 9, 2025 10:46:28)

Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

pour l'instant, j'ai ça:
https://ibb.co/Fq8tD0CY
l'élément 5 de points correspond à max step
l'élément 6 correspond à step
chat gpt m'a un peu aidé… mais c'est compliqué

Last edited by Lu_Li_49 (March 9, 2025 10:52:29)

wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Tu peux ajouter dans le bloc personnalisé « mélanger lignes ……… » une instruction « à l'index (i) »
qui sauvegarde le mélange de coordonnées dans ta liste points à i, i+1 :
définir Mélanger points | 2x\[x, y] (x1) (y1) (x2) (y2) \[%] (percent) à l'index (i)
remplacer l'élément ((i) + [0]) de la liste [points v] par ( ( (x1) * (percent) ) + ( (x2) * ( (percent) - [1] ) ) )
remplacer l'élément ((i) + [1]) de la liste [points v] par ( ( (y1) * (percent) ) + ( (y2) * ( (percent) - [1] ) ) )
Il faudra ensuite utiliser les index suivants (dans l'ordre) : 1, 3, et 7 pour le dernier
Puis (en fin de boucle) :
go to x: (élément (7) de [points v]) y: (élément (8) de [points v])
C'est tout bon ?
Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

comme ça?:
https://scratch.mit.edu/projects/1144396701/
vous pouvez bouger les points.

Last edited by Lu_Li_49 (March 9, 2025 13:16:32)

Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

Le problème c'est que ça n'a pas l'air de ressembler à l'éditeur vecteur de scratch.
wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Il y a un premier petit raté dans la création des clones de ton projet (regarde les index de la variable moi, les clones partagent des données).

Le second vient de moi, voici le code corrigé :
Les ratés : “1 - percent” et non “percent - 1” ; inversion des points pendant le mélange ; la droite entre p2 et p3 doit commencer à p3 dans le mélange

Ça devrait être bon

Tu peux t'intéresser aux courbes cubiques aussi (celles utilisées par Scratch), mais je n'ai jamais codé leur fonctionnement sur Scratch (si tu demandes de l'aide, je découvrirais en même temps que toi).
Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

Merci, alors comment fonctionnent les courbes cubiques?

Last edited by Lu_Li_49 (March 15, 2025 13:53:27)

wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Je vais le découvrir en même temps que toi . Si ça ne te dérange pas d'attendre, je vais créer un tuto sur le SWFR d'ici demain (cette nuit, après le match du M6N) pour gérer des courbes quatra/cubiques.

En s'y intéressant, c'est tout autant une histoire de mélange de points et de progression sur des droites projetées, même si dans un langage plus dynamique comme Python l'implémenter serait bien plus aisé.

Last edited by wilhelm43 (March 15, 2025 16:09:41)

ababoin07
Scratcher
500+ posts

Comment peut-on dessiner en vecteur avec stylo?

Lu_Li_49 wrote:

Merci, alors comment fonctionnent les courbes cubiques?
Les quadratic curves sont en gros exactement le projet que tu viens de faire avec l’aide de wilhelm. A quadratic curve est une courbe de bézier à 3 points. En fait, on dit quadratic car les calculs fait avec plusiquers lissages dans ton codes peuvent être simplifiés en une fonction de degré 2 pour chaque dimension. Une courbe cubique est gérée par 4 points, on dit cubique car les calculs peuvent être simplifiés par une fonction de 3ème degré par dimension.
Formule:
Soit t variant entre 0 et 1, P0, P1, P2 et P3 les valeurs des dimensions observées (soit x0, x1… pour abcisse et y0, y1… pour ordonnée, c’est les mêmes formules).
On a:
f(t) = (1-t)**3*P0+3*(1-t)**2*t*P1+3*(1-t)*t**2*P2+t**3*P3
Si je ne me suis pas trompé xD

Last edited by ababoin07 (March 15, 2025 21:10:42)

wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Yep sur Scratch cependant, c'est plus simple à implémenter d'utiliser la technique des mélanges. Je suis en train de créer la page, je modifie ce post dès que l'article est disponible (NDT : Il y aura un projet).

L'article est disponible (lien).

Last edited by wilhelm43 (March 16, 2025 11:47:53)

ababoin07
Scratcher
500+ posts

Comment peut-on dessiner en vecteur avec stylo?

wilhelm43 wrote:

Yep sur Scratch cependant, c'est plus simple à implémenter d'utiliser la technique des mélanges. Je suis en train de créer la page, je modifie ce post dès que l'article est disponible (NDT : Il y aura un projet).
C’est plus simple si on veut implémenter un nombre arbitraire de points, en effet, mais si tu veux faire des projets avancé comme des remplisseurs de courbes quadratics ou cubics, il est mieux d’utiliser les formule, en fait, c’est plus rapide et viable pour les performances. (NDT ne veut pas dire Note Du Traducteur ?)

Last edited by ababoin07 (March 16, 2025 07:28:33)

WWX43434
Scratcher
31 posts

Comment peut-on dessiner en vecteur avec stylo?

Le SWFR est down depuis hier soir mais voilà le projet annoncé, implémentant une classe Point avec quelques méthodes, et deux fonctions permettant de réaliser des courbes quadratiques et cubiques.

https://scratch.mit.edu/projects/1147876636/

Je réaliserai l'article du Wiki dès que ce dernier est accessible.
Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

Et pour les courbes vecteurs avec les barres et les points?:
https://ibb.co/9kPyFScD
wilhelm43
Scratcher
1000+ posts

Comment peut-on dessiner en vecteur avec stylo?

Et bien, les « points » supplémentaires sont les points de contrôle, et les différents point sont reliés par des courbes cubiques.
Lu_Li_49
Scratcher
100+ posts

Comment peut-on dessiner en vecteur avec stylo?

ok merci
ababoin07
Scratcher
500+ posts

Comment peut-on dessiner en vecteur avec stylo?

Lu_Li_49 wrote:

ok merci
Je t’invite à fermer le sujet si ta question a été répondue entièrement.

Powered by DjangoBB