Trait, courbe, ligne, points tillés, etc...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

ça plante dès qu'on essaie de cliquer avec le bouton gauche de la souris ;)
Les autres boutons, sont ok.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trouver un point entre deux points

Message par djes »

J'ai oublié de dire qu'il faut activer la gestion des threads :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

j'aurai pu y penser ^^

C'est effectivement mieux avec la gestion des threads ;)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

Bon, j'ai retesté et le résultat est top pour le moment, avec des lignes de 1 pixels avec AA :)

J'attends vraiment la suite avec impatience, Djes ;)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trouver un point entre deux points

Message par djes »

Faudra attendre un peu, je suis en voyage pour une semaine... :-P
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

djes a écrit :Faudra attendre un peu, je suis en voyage pour une semaine... :-P
Bien sûr, pas de soucis, c'est juste qu'en testant j'ai trouvé que ça avait vraiment du potentiel ;).
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trouver un point entre deux points

Message par djes »

Merci ! J'espère pouvoir être utile. Le bézier est assez hard à débugger, je crois que je vais devoir me plonger dans l'algo pour voir où ça pèche.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trouver un point entre deux points

Message par djes »

Bon, j'ai laissé tomber le bézier pour l'instant, et refait une petite fonction 'curve' qui crée une courbe entre deux mouvements de la souris en fonction de la direction prise par le 3ème point. Ca semble bien fonctionner, la courbe est douce même quand les mouvements de la souris sont rapides, mais il faudrait tester avec une tablette. L'antialias n'est pas réussi.

J'ai laissé plein de code inutile pour l'instant, dont des exemples de Catmull-Rom qui utilisent deux points directeurs et qui permettraient d'améliorer la fonction (en se servant du point précédent ET du point suivant). Il y a des programmes fonctionnels de Catmull-Rom en PB sur le forum (Typhoon et le module de Comtois) dont on peut s'inspirer.

A suivre : si j'y arrive, une fonction curve qui fait tout, "à la" Bresenham, et avec antialiasing tant qu'à faire...
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

salut

j'ai testé la dernière version avec ma tablette.
J'ai l'impression que les courbes ne sont pas lissées, car le rendu final est comme parcouru de spasmes ^^

Voici une image pour mieux comprendre le résultat :
Image

On voit sur les courbes des sortes de bosses. ça doit sans doute être lié au fait qu'à la tablette, on peut dessiner plus vite qu'à la souris, mais même lorsque je vais lentement ou à la souris, j'obtiens des résultats similaires ^^.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trouver un point entre deux points

Message par djes »

Merci d'avoir testé, c'est ce qu'il me fallait. L'algo crée une courbe à partir de 3 points, entre le 1er et le 2ème, et sa forme optimale est à déterminer ensemble. Mets ça aux alentours du CLS (lignes 580...) pour voir sa forme :

Code : Tout sélectionner

  ;-CLS
  StartDrawing(CanvasOutput(0))
  ;Box(0, 0, 800, 600, #White)
  ;plotCubicBezierSegAA(x, y, 400, 200, 400, 300, 400, 400, $FF)
  x1 = 200 : y1 = 500 :   Plot(x1, y1, #Blue)
  x2 = 400 : y2 = 400 :   Plot(x2, y2, #Blue)
  x3 = 500 : y3 = 500 :   Plot(x3, y3, #Blue)
  Curve(x1, y1, x2, y2, x3, y3, #Red)
Même si elle ne devrait pas être parfaite, je me demande s'il n'y a pas un petit bug dans certains cas quand même...
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Trouver un point entre deux points

Message par falsam »

Hello Spock. J'ai essayé ton code. Si on va trop cite et c'est le cas de Blendman, l'écartement entres les points n'est pas identique.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trouver un point entre deux points

Message par blendman »

@djes : ta courbe, avec ton exemple semble bien, mais effectivement, dès que je dessine, les courbes obtenues ont des bosses ^^

@Dobro : sympa tes deux codes. Le bézier est vraiment pas mal, on peut régler en plus le nombre de "segments" (le i, dans la procédure bézier).
Par contre, ce qu'on cherche à obtenir, c'est un joli trait, avec AA et tout ;).
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trait, courbe, ligne, points tillés, etc...

Message par djes »

Héhé, les bosses devraient disparaître avec le catmull... (j'espère) lol. Merci pour le bezier, Spock !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Trait, courbe, ligne, points tillés, etc...

Message par djes »

Blendman> Code mis à jour, pourrais-tu retester, stp ? Merci
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Trait, courbe, ligne, points tillés, etc...

Message par blendman »

@dobro : le problème de cette méthode c'est que pour les grandes images, ça devient vite ingérable ^^ (imagines si tu dessines sur une images de 3000*3000 par exemple, et ça m'arrive ;)).

@djes : c'est mieux, j'ai beaucoup moins de bosses ^^ :
Image
Il reste encore de temps en temps des légères bosses et l'AA semble moins bon que le 1er code que tu avais fait, mais j'imagine que ça va encore un peu changé ;).

Sinon, je me disais qu'on pourrait peut-être regardé du coté de Pencil, mypaint ou krita, qui sont opensources, pour voir comment ils procédent. Car tous les trois ont une gestion du trait qui est vraiment bien (lissé et joli AA)
Répondre