2010-04-27 5 views
1

Je me demandais comment les applications de dessin dessinent tout le temps que la souris est en bas sans avoir d'espaces vides. Ce que je veux dire est, par exemple, si le programme n'a dessiné des cercles qu'à la coordonnée X, y de la souris, alors si la souris est allée trop vite, cela ressemblerait à un tas de petits cercles plutôt qu'à une belle ligne continue. Comment cela peut-il être fait sans dessiner constamment une courte ligne droite entre où la souris était il y a 0,001 secondes et où la souris est maintenant. MerciDessiner en continu dans l'application de dessin

+1

@everyone: OP demande comment fonctionne l'outil * brush *, pas l'outil * line * –

+0

@BlueRaja, merci, j'ai mal compris :) –

+0

@BlueRaja: qu'est-ce qui vous fait penser qu'il/elle demande l'outil de pinceau? – MusiGenesis

Répondre

3

Il ne peut pas se faire sans dessin constamment une ligne entre le point de la souris actuelle et le point précédent, ce qui est pourquoi est-ce que les programmes de dessin en général font faire.

Les programmes de dessin plus élaborés s'adapteront aux lignes courbes à plusieurs points précédents pour obtenir un trait de dessin plus naturel, mais le principe est le même.

Mise à jour: Basé sur un commentaire, il semble que vous ayez un temporisateur impliqué dans votre code de dessin. Ceci est certainement inutile, puisque votre application va générer un événement MouseMove chaque fois que la souris est déplacée, et vous pouvez utiliser cet événement pour dessiner la ligne suivante.

+0

Ligne, ou, une sorte de [courbe] (http://en.wikipedia.org/wiki/B%C3%A9zier_curve) –

+0

"Bezier" = "ajuster des lignes sinueuses à plusieurs points". :) – MusiGenesis

+0

Serait-il une bonne idée de créer des tableaux de ces derniers comme des instructions pour générer des lignes, puis les pousser dans une file d'attente pour chaque opération, puis les enlever pour une annulation? – jmasterx

2

Vous pouvez dessiner une ligne courte courbe entre l'endroit où la souris était il y a 0,001 secondes et où la souris est maintenant.

Les positions de la souris ne sont pas continues, si vous le déplacez plus vite que très lentement, vous obtiendrez des points discrets non connectés. Vous devez interpoler entre ces points en utilisant votre méthode préférée.

+0

Bon alors la façon dont je le fais en utilisant une minuterie et en dessinant des lignes droites courtes est correcte? – jmasterx

+0

Vous pouvez utiliser une courbe de Bézier http://en.wikipedia.org/wiki/B%C3%A9zier_curve pour avoir un bon effet. –

+1

Vous n'avez pas besoin d'une minuterie. Vous avez juste besoin d'enregistrer l'emplacement de la souris précédente, puis dessinez une ligne à l'emplacement de la souris actuelle. Si vous faites une interpolation plus chic (disons, cubique), vous avez juste besoin de garder la trace de plus de points dans le passé. –