Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

De la ligne droite

30 réponses
Avatar
LE TROLL
Bonjour,

Voici une petite photo qui "démontre" qu'en informatique, à cause des
pixels, une ligne n'est droite que dans trois cas, car on ne peut appliquer
des formules mathématiques (géométriques) sans tenir compte des contrainte
informatiques, surtout quand la théorie géométrique s'avère contraire à la
contrainte informatique.
En effet, sur une feuille, ou ailleurs, en théorie géométrique, si on trace
un segment de droite entre deux point ça donnera une ligne "droite", mais
cette théorie ne peux pas s'appliquer en informatique, sauf dans trois cas.
or quand on est dans un forum de programmation, on ne développe pas des
pseudo-formule mathématique qui déjà sont inutiles du fait qu'il existe des
fonctionnalités prédéfinies pour résoudre le problème, et qu'en plus elles
sont en quasi-totalité contraires aux contraintes informatiques !
Par exemple, si on demande comment faire une boucle, on ne produit pas les
théorie mathématiques sur l'addition et la soustraction, ni le code
assembleur in fine ayant servi à faire la boucle, mais seulement les
directives informatiques permettant de le faire (for, to, next), alors pour
la ligne en pixels ça ne fait pas exception, les pseudo savoirs
anglo-mathématiques ne relèvent pas de la programmation dans un forum en
langue française, sauf s'il n'y avait pas le choix, mais ici il y a
grandement le choix !

Voyez l'exemple :

http://cjoint.com/?bjmyxmk3gQ

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.

10 réponses

1 2 3
Avatar
at
Bon pour faire avancer le schimili, repasser par les points d'une
droite, c'est pas aussi évident que ça

Dessinez avec Line (de bas en haut) sur la form et le programme essayer
de repasser par les points de la droite. Et bien ça foire. Qui a mieux
?


' Déclare les variables.
Dim CX, CY, z, Msg, XPos, YPos
Dim ind, y, x, w As Integer
ScaleMode = 3 ' Définit pixel comme unité de
' mesure.
DrawWidth = 1 ' Définit la propriété DrawWidth.

x = Line1.X1 - 1
y = Line1.Y1 - 1
z = Line1.X2 - Line1.X1

w = Line1.Y2 - Line1.Y1

ind = z / w


For y = Line1.Y1 To Line1.Y2

x = x + ind

XPos = x

YPos = y

PSet (XPos, YPos), QBColor(7)
DoEvents

Next
Avatar
Jean-Marc
On 9 jan, 18:08, at wrote:
Bon pour faire avancer le schimili, repasser par les points d'une
droite, c'est pas aussi évident que ça

Dessinez avec Line (de bas en haut) sur la form et le programme essayer
de repasser par les points de la droite. Et bien ça foire. Qui a mieux
?



Pas moi, mais Bresenham, lui dit mieux... Il dit même tellement
mieux que c'est probablement cet algo ou un dérivé qui est utilisé
par VB pour tracer ces lines.
Voir : http://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_segment_de_ Bresenham

J'ai la flemme de retranscrire en VB, mais je l'avais fait
il y a longtemps dans un autre langage et c'était parfait.

--
Jean-Marc
Avatar
at
Jean-Marc a formulé ce samedi :

Pas moi, mais Bresenham, lui dit mieux... Il dit même tellement
mieux que c'est probablement cet algo ou un dérivé qui est utilisé
par VB pour tracer ces lines.
Voir :
http://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_segment_de_Bresenham

J'ai la flemme de retranscrire en VB, mais je l'avais fait
il y a longtemps dans un autre langage et c'était parfait.



Bon ok! Donc j'étais dans le vrai dans ma question à LETROLL quand j'ai
écrit "Je me demande en faisant ainsi si on va retrouver exactement et
à coup sûr les points de la ligne dessinée à l'écran."

Car effectivement, il faut passer par un algo assez complexe et non pas
une simple boucle.

A+
Avatar
LE TROLL
Salut,

En fait je me suis tenu à l'énoncé : ligne "droite".

Bon,,je vais le faire et passer le code ici, c'est encore le mieux :

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"at" a écrit dans le message de
news:4b48d28b$0$963$
Jean-Marc a formulé ce samedi :

Pas moi, mais Bresenham, lui dit mieux... Il dit même tellement
mieux que c'est probablement cet algo ou un dérivé qui est utilisé
par VB pour tracer ces lines.
Voir :
http://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_segment_de_Bresenham

J'ai la flemme de retranscrire en VB, mais je l'avais fait
il y a longtemps dans un autre langage et c'était parfait.



Bon ok! Donc j'étais dans le vrai dans ma question à LETROLL quand j'ai
écrit "Je me demande en faisant ainsi si on va retrouver exactement et à
coup sûr les points de la ligne dessinée à l'écran."

Car effectivement, il faut passer par un algo assez complexe et non pas
une simple boucle.

A+




Avatar
at
Le 10/01/2010, LE TROLL a supposé :
Salut,

En fait je me suis tenu à l'énoncé : ligne "droite".

Bon,,je vais le faire et passer le code ici, c'est encore le mieux :




Super, il est invisible ton code.

J'ai trouvé ça sur le web:

Private Sub BresLine(InitialX As Long, InitialY As Long, FinalX As
Long, FinalY As Long)
' Bresenham's line algorithm for Microsoft Visual Basic 6.0
' Implementation by Robert Lee July, 2002 Public Domain

ScaleMode = 1
DrawWidth = 1

Dim Steep As Boolean
Dim DeltaX As Long, DeltaY As Long, Delta As Long
Dim StepX As Long, StepY As Long
Dim Coord As Long


Steep = False
DeltaX = Abs(FinalX - InitialX)
If (FinalX - InitialX) > 0 Then
StepX = 1
Else
StepX = -1
End If
DeltaY = Abs(FinalY - InitialY)
If (FinalY - InitialY) > 0 Then
StepY = 1
Else
StepY = -1
End If
If DeltaY > DeltaX Then
Steep = True
Swap InitialX, InitialY
Swap DeltaX, DeltaY
Swap StepX, StepY
End If
Delta = (DeltaY * 2) - DeltaX
For Coord = 0 To DeltaX - 1
If Steep Then
PSet (InitialY, InitialX), QBColor(3)

Else
PSet (InitialX, InitialY)
End If
While Delta >= 0
InitialY = InitialY + StepY
Delta = Delta - (DeltaX * 2)
Wend
InitialX = InitialX + StepX
Delta = Delta + (DeltaY * 2)
Next Coord
Me.PSet (FinalX, FinalY)
End Sub
Sub Swap(Var1, Var2)
Var1 = Var1 Xor Var2
Var2 = Var2 Xor Var1
Var1 = Var1 Xor Var2
End Sub


Private Sub Command1_Click()
BresLine 1680, 2760, 6240, 4080

End Sub
Avatar
LE TROLL
J'ai fait un nouveau poste, tou y est, et même davantage

--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"at" a écrit dans le message de
news:4b4990fd$0$933$
Le 10/01/2010, LE TROLL a supposé :
Salut,

En fait je me suis tenu à l'énoncé : ligne "droite".

Bon,,je vais le faire et passer le code ici, c'est encore le mieux :




Super, il est invisible ton code.

J'ai trouvé ça sur le web:

Private Sub BresLine(InitialX As Long, InitialY As Long, FinalX As Long,
FinalY As Long)
' Bresenham's line algorithm for Microsoft Visual Basic 6.0
' Implementation by Robert Lee July, 2002 Public Domain

ScaleMode = 1
DrawWidth = 1

Dim Steep As Boolean
Dim DeltaX As Long, DeltaY As Long, Delta As Long
Dim StepX As Long, StepY As Long
Dim Coord As Long


Steep = False
DeltaX = Abs(FinalX - InitialX)
If (FinalX - InitialX) > 0 Then
StepX = 1
Else
StepX = -1
End If
DeltaY = Abs(FinalY - InitialY)
If (FinalY - InitialY) > 0 Then
StepY = 1
Else
StepY = -1
End If
If DeltaY > DeltaX Then
Steep = True
Swap InitialX, InitialY
Swap DeltaX, DeltaY
Swap StepX, StepY
End If
Delta = (DeltaY * 2) - DeltaX
For Coord = 0 To DeltaX - 1
If Steep Then
PSet (InitialY, InitialX), QBColor(3)

Else
PSet (InitialX, InitialY)
End If
While Delta >= 0
InitialY = InitialY + StepY
Delta = Delta - (DeltaX * 2)
Wend
InitialX = InitialX + StepX
Delta = Delta + (DeltaY * 2)
Next Coord
Me.PSet (FinalX, FinalY)
End Sub
Sub Swap(Var1, Var2)
Var1 = Var1 Xor Var2
Var2 = Var2 Xor Var1
Var1 = Var1 Xor Var2
End Sub


Private Sub Command1_Click()
BresLine 1680, 2760, 6240, 4080

End Sub




Avatar
at
Après mûre réflexion, LE TROLL a écrit :
J'ai fait un nouveau poste, tou y est, et même davantage



Ou ?
Avatar
LE TROLL
10/01/2010 10h03
--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"at" a écrit dans le message de
news:4b499c17$0$17504$
Après mûre réflexion, LE TROLL a écrit :
J'ai fait un nouveau poste, tou y est, et même davantage



Ou ?




Avatar
Fred
"Jacques93" a écrit dans le message de groupe de
discussion :

Bonjour Fred, Le Retour ? :-)



Bonjour Jacques,
De passage seulement :-)
Ce groupe est toujours aussi intéressant à lire même si je n'utilise
plus VB ;-)

--
Fred

Avatar
at
LE TROLL vient de nous annoncer :
10/01/2010 10h03



je l'ai trouvé ton message sur

http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/ca2fd5c185f88dfe#

Car ton message ne passe pas avec news.orange.fr sans doute parce que
tu as mis des pièces jointes ?

Bon sinon ton programme ne redessine pas une ligne, il repasse par tous
les points possibles de la ligne et recupère la couleur à chaque fois.
Ce qui fait que si je dessine une ligne à l'execution

Line (100, 100)-(700, 400), QBColor(0)

avant qu'une autre ligne ne soit dessinée au hasard par ta formule

Line (x, y)-(x1, y1), QBColor(14)

et que ensuite on efface avec

me.cls

ton

For i = x To x1 ' écriture
For j = y To y1
PSet (i, j), c(i, j)
Next j
Next i

il redessine les deux lignes (!?), dont une est altérée (la 1ere) au
cas ou elle ne s'inscrit pas dans le champ de la deuxième. Donc ce
n'est pas au point :)

D'ailleurs si tu remplaces c(i,j) qui désigne la couleur récupérée par
0 (du noir) ça dessine un beau rectangle plein.

Bien essayé en tout cas.
1 2 3