2009-08-28 14 views
2

Lorsque l'utilisateur fait glisser son stylet sur la tablette, vous recevez une série de coordonnées. Vous voulez approximer le chemin du stylo avec une ligne lisse, ne laissant que quelques points derrière lui. Comment ferais-tu ceci? En d'autres termes, comment rendriez-vous une belle ligne de réponse lisse comme un utilisateur dessine avec leur tablette? Relier simplement les points avec des lignes droites n'est pas assez bon. Les vrais programmes de dessin font un meilleur travail de courbure de la ligne, peu importe à quel point les points d'échantillonnage sont proches ou éloignés. Certains vous permettent même de leur donner un nombre pour indiquer la quantité de lissage à faire, en tenant compte des stylos nerveux et des mains. Où puis-je apprendre à faire ce genre de choses?Dessin d'une ligne lisse à partir de l'entrée de la tablette

+0

ht connexes tp: // stackoverflow.com/questions/3347483/écriture-a-peinture-programme-a-la-ms-peinture-comment-interpoler-entre-souris-déplacer-veille – kervin

Répondre

2

Je sais que c'est une vieille question, mais j'ai eu le même problème et je suis venu avec 2 différentes solutions:

  • La première approche est d'utiliser deux résolutions: Un, lorsque l'utilisateur insère les points de chemin les reliant avec des lignes droites. Deuxièmement, lorsque l'utilisateur termine le trait, supprimez les lignes et dessinez et splinez dessus. Cela devrait être plus lisse que les lignes droites.

  • La deuxième approche consiste à lisser les nouveaux points avec une moyenne pondérée du point échantillonné précédent. Donc, chaque fois que vous obtenez un nouveau point échantillonné [x1, y1] au lieu de le peindre directement, vous prenez le point échantillonné précédent [x2, y2] et créez un nouveau point intermédiaire avec la moyenne pondérée des deux points. Le pseudocode pourrait être quelque chose comme:

    newPoint = [x1, y1]; oldPoint = [x2, y2];

    point2Paint = [(x1 * 0,3) + (x2 * 0,7), (y1 * 0,3) + (y2 * 0,7)]; oldPoint = newPoint;

    Étant 0,7 et 0,3 les coefficients pour la moyenne pondérée (Vous pouvez les modifier pour obtenir votre lissage désiré :)

J'espère que cela aiderait

Mise à jour le 13 décembre: Ici, il est un article expliquant les différentes méthodes de dessin, il y a de bons concepts qui peuvent être appliquées (lissage des bords, des courbes de Bézier, joints lisses)

http://perfectionkills.com/exploring-canvas-drawing-techniques/

0

Je n'ai jamais eu à les implémenter (uniquement à des fins académiques), mais vous pouvez jeter un oeil à l'article interpolation de wikipedia.

extrait de l'article:

interpolation est un procédé de construction de nouveaux points de données dans la plage d'un ensemble discret de points de données connus. En ingénierie et en science, on a souvent un certain nombre de points de données, obtenus par échantillonnage ou expérimentation, et on essaie de construire une fonction qui correspond étroitement à ces points de données. C'est ce qu'on appelle l'ajustement de courbe ou l'analyse de régression. L'interpolation est un cas spécifique d'ajustement de courbe, dans lequel la fonction doit passer exactement par les points de données.

Espérons que ça aide.