Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » Dessin avec LINE et CIRCLE sous qb4.5

diemaker form
ProgBoarder
Citer Windows XP Firefox 2 - Posté le 15/02/2008 à 21:15
Bonsoir,
Encore une demande pas simple !
Pour faire un dessin vectoriel (composé de lignes, de cercles et d'arcs)
sous qb4.5, il faut utiliser :
pour une ligne :
LINE (coordonnéesXdepart, coordonnéesYdepart)-(coordonnéesXfin, coordonnéesYfin), couleur
pour un arc ou cercle :
CIRCLE (coordonnéesXcentre,coordonnéesYcentre), rayon, couleur, angleDépart, angleFin
pour ça je veux bien, mais, car il y a un "mais"
j'ai remarqué que le sens du dessin en +X va de la gauche vers la droite (normal +X)
j'ai remarqué que le sens du dessin en -X va de la droite vers la gauche (normal -X)
j'ai remarqué que le sens du dessin en +Y va du haut vers la bas (pas normal +Y)
j'ai remarqué que le sens du dessin en -Y va du bas vers le haut (pas normal -Y)
Comment inverser le sens des +Y et -Y pour que l'origine d'un dessin ce situe en bas à gauche ??
J'ai essayé de mettre mes Y en -Y mais le dessin ce créer en dehors de l'écran(normal, origine en haut à gauche)
La fonction LINE est bien faite, coordonnées XetYdépart à coordonnées XetYfin (très simple)
mais la fonction CIRCLE ne s'adapte pas facilement quand on a les coordonnées XetYdépart, coordonnéesXetYfin,
coordonnées XetYduCentre, SensDeRotation
sans connaitre le rayon, ni l'angle de départ, ni l'angle de fin !
Si quelqu'un a une solution à MON MOUTON A 5 PATTES,
Si j'ai été compréhensible, ce qui n'est pas facile !
Merci à tous,
DMF
(désapprouve)
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
zuzuf
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 15/02/2008 à 22:35
tu peux utiliser la formule suivante:
nouvelle coordonnée Y = hauteur de l'écran - ancienne coordonnée Y

si j'ai bien compris ça te donneras ce que tu cherches. Sinon ça fait bien longtemps que je n'ai plus fait de QBasic alors je ne me souviens pas s'il y a une fonction pour faire des transformations sur les coordonnées mais ça m'étonnerais que ça permette des trucs complexes si ça existe.
Linux a un noyau, windows un pepin
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 15/02/2008 à 22:59
bonsoir,
j'ai bien pensé déplacer les coordonnées de l'origine, mais le fait que qb dessine en -Y inverse le sens du dessin en miroir vertical, je m'explique :
si tu traces un triangle :
X100,Y0
X-20,Y80
X0,Y0
en coordonnées absolues, ton triangle a la point en bas avec une symétrie horizontale !
Bizarre ?
Merci.
DMF
(triste)
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 16/02/2008 à 00:11
(héhé Salutations.

Par curiosité, va voir sur le Wall :


Wall (54) : Afficher le code source - Ouvrir dans une nouvelle fenêtre

J'ai bien les ordonnées qui croissent du bas vers le haut.
Dans ce petit programme également

SCREEN 12: WINDOW (1, 480)-(640, 1): CLS
LINE (200, 100)-(80, 180), 15
LINE (80, 180)-(100, 100), 15
LINE (100, 100)-(200, 100), 15

Qu'en penses-tu ?

(héhé Salutations et bonne nuit.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 16/02/2008 à 00:55
Super, Merci énormement SFLPMEA !

il ne faut pas oublier le "CLS" à la fin sinon ça ne change rien !
Par contre pour la fonction CIRCLE je n'arrive pas à déterminer l'angle début et l'angle de fin quand on a les coordonnéesXetYdépart, coordonnéesXetYfin,
coordonnées XetYduCentre et le SensDeRotation
j'ai trouvé le rayon avec un calcul trigo
Si tu as une formule, bienvenu,
Bonne nuit
DMF

(héhé
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 16/02/2008 à 10:28
(héhé Salutations.

Concernant les cercles, je t'adresse un petit programme pour les dessiner, en complet ou simplement des arcs (uniquement le sens trigo) :

SCREEN 12: WINDOW (1, 480)-(640, 1): CLS
X% = 400: Y% = 200 'Coordonnées du centre
Xc% = 260: Yc% = 300 ' Coordonnées d'un point de la circonférence
' C'est suffisant pour déterminer le cercle
' Si tu mets un deuxième point du cercle, il faudrait être vraiment certain
' qu'il est sur celui-ci
A! = 22 ' Angle de l'arc à dessiner en grades
R% = SQR((X% - Xc%) ^ 2 + (Y% - Yc%) ^ 2)
'CIRCLE [STEP] (x,y),rayon[,[couleur][,[origine][,[fin][,aspect]]]]
CIRCLE (X%, Y%), R%, 11 ' Circonférence complète pour information
SLEEP: CLS
Sinus.D! = (Yc% - Y%) / R%
Cosinus.D! = (Xc% - X%) / R%
'Formule pour transformer en grades
'Grades! = ATN(Sinus! / SQR(1 - Sinus! ^ 2)) / 3.141593 * 200
IF Sinus.D! = 0 THEN Sinus.D! = .01 ' pour éviter une division par zéro
Grades.D! = ATN(Sinus.D! / SQR(1 - Sinus.D! ^ 2)) / 3.141593 * 200
Grades.F! = Grades.D! + A!
' Maintenant, il faut transformer les grades en radians !!
Radian.D! = 3.141593 * 2 / 400 * Grades.D!
Radian.F! = 3.141593 * 2 / 400 * Grades.F!
CIRCLE (X%, Y%), R%, 15, Radian.D!, Radian.F!
FOR I% = 1 TO 15
SLEEP
Radian.D! = Radian.F!
Radian.F! = (Radian.F! + .3): PRINT Radian.F!
CIRCLE (X%, Y%), R%, I%, Radian.D!, Radian.F!
NEXT I%

Je dessine le cercle complet, puis des arcs de cercle.
Analyse tout cela et je te souhaite un bon week-end.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/02/2008 à 16:54
Bonjour et merci pour ton programme SFLPMEA,
Mais mon problème est de trouver l'angle de départ et l'angle d'arrivée d'un segment d'arc en ayant seulement les infos :
x et y du centre
x et y du début de l'arc
x et y de la fin de l'arc
je n'ai acune autre infos sur le segment de l'arc !
Merci pour tes recherches,
DMF
(triste)

Edité par diemaker form ( 18/02/2008 16:54:46 )
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 18/02/2008 à 17:27
Petite question : l'angle par rapport à quoi ?
Tu parles de l'angle de départ et de celui d'arrivé, mais tu prends quoi comme référence ?
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 18/02/2008 à 17:42
(héhé Salutations.

Je vais me replonger dans mes souvenirs de géométrie.

Le problème est le suivant :
Tu as deux points :
- - > D (début de l'arc de cercle)
- - > F (Fin de l'arc de cercle)
Et - - > C (Centre du cercle)
Dont tu connais les coordonnées.
Donc C doit se trouver sur la médiatrice de DF, c'est-à-dire à égale distance de D et de F, et il y a une infinité de points répondant à cette dernière condition, TOUS les points de la médiatrice (et uniquement ceux-la, heureusement).
Première chose à faire : contrôler que CD = CF.
Le problème serait presque plus simple en se fixant les coordonnées de D, celles de F et le rayon et non les coordonnées du centre (dans ce cas, il y aurait 2 solutions à condition que le Rayon soit > que DF/2).
Effectue ce petit contrôle, et nous verrons la suite à donner (formule de Pythagore).

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/02/2008 à 18:00
Pour Francesco :
l'angle de debut et l'angle de fin sont indispensable pour la fonction circle :
copie partielle de l'aide :
Details sur l'instruction CIRCLE
Syntaxe
CIRCLE [STEP] (x,y),rayon[,[couleur][,[d‚but][,[fin][,aspect]]]]

Argument Description
STEP specifie que x et y sont des valeurs de decalage par rapport …
la position actuelle du curseur graphique.
x,y definissent les coordonnees x et y du centre du cercle ou de
l'ellipse.
rayon donne le rayon du cercle ou de l'ellipse … tracer dans le
systeme de coordonnees actuel.
couleur attribut de la couleur voulue. La couleur par defaut est celle
du premier plan.
debut, fin angles de debut et de fin donnes en radians, pour l'arc a
tracer. Ces arguments sont employes pour tracer des cercles
partiels ou des ellipses partielles. L'intervalle de leurs
valeurs s'etend de -2PI … 2PI radians, o— PI= 3,141593. La
valeur de debut par defaut egale 0 radians et celle de fin
egale 2PI radians.

Voila pour francesco.

Pour FLPMEA :
J'ai utilisé ce principe pour calculer le rayon


' (c=X depart)(d=Y depart)
' (e=X arrivee)(f=Y arrivee)
' (g=X centre rayon)(h=Y centre rayon)
' calcul du rayon
R2 = ((c - g) ^ 2) + ((d - h) ^ 2)
R = SQR(R2)


mais pour les angles début et fin je ne vois pas (gêné)
merci à vous,
DMF
(désapprouve)
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 18/02/2008 à 18:29
Bon, je n'ai pas testé, mais a priori, c'est pour tracer un cercle trigonométrique, et donc, la référence est l'horizontal.

Donc, pour le calcul, un petit pythagore suffit
acos((X - Xcentre) / rayon)

Attention, cela ne donne qu'un angle géométrique pour le demi-cercle supérieur. Il suffit de regarder si le point est au-dessus ou au-dessous du centrtre...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,095 s - Crédits - Stats
1 connecté