Bonjour a tous,
j'aurai voulu savoir si il existait une bibliothèque qui me permettrait de tracer un segment entre deux points de la largeur que je souhaite en C avec SDL ?
Merci
-----
Bonjour a tous,
j'aurai voulu savoir si il existait une bibliothèque qui me permettrait de tracer un segment entre deux points de la largeur que je souhaite en C avec SDL ?
Merci
Bonjour,
J'ai déjà eu l'occasion de me poser la question, la seule méthode que j'ai trouvée est de tracer des parallèles au segment AB.
D'accord, merci et pour faire un segment entre deux points, il y a une fonction qui le fait ou il faut jouer avec les maths pour le faire ?
Là, de toute façon, pour faire du dessin, il faut une bibliothèque graphique.
Apparemment, SDL permet du graphique, il semble même que ce soit sa spécialité.
Faites une recherche de "Moveto" puis "Lineto", vous devriez trouver votre bonheur.
A mon avis drawline()
A+
J'ai trouvé une bibliothèque qui s'appelle SDL_Draw seulement, je n'arrive pas à l'installer avec Code::Blocks avec ce lien http://sdl-draw.sourceforge.net/ !
Pouvez vous me donner les démarches pour l'installer ?
Pas la peine de bibliothèque :
Enjoy !Code:void Draw_Lines(int x1,int x2,int y1,int y2) { double x = x2 - x1; double y = y2 - y1; double length = sqrt( x*x + y*y ); double addx = x / length; double addy = y / length; x = x1; y = y1; for(double i = 0; i < length; i += 1) { setPixel( (int)x, (int)y, SDL_MapRGB(screen->format, 0x00, 0x00, 0x00) ); x += addx; y += addy; } } void setPixel(int x, int y, Uint32 coul) { if(x>=0 && y>=0) *((Uint32*)(screen->pixels) + x + y * screen->w) = coul; }
Dernière modification par JPL ; 14/02/2013 à 23h33. Motif: Ajout de la balise Code (#) pour garder l'indentation
Un peu surprenant, mais, bon, si vous êtres content, tout va bien.
Qu'est ce qui ne va pas ?
je suppose que Dlzlogic est un peu surpris qu'il faille récrire les fonctions de la librairie graphique. Il doit bien exister une fonction qui dessine un trait dans la SDL.
A+
En fait sdl s'occupe en gros des rectangles pour construire des contenus d'écran (coté affichage...).
Pour remplir ces rectangles, il faut utiliser des librairies genre sdl_image, sdl_gfx, sdl_svg ou autre...
Jusqu'ici tout va bien...
Bonjour,
Jr ne connais pas la SDL, j'ai jeté un coup d'oeil sur le net, mais pas plus.
En tout cas, il existe des librairies graphiques en C, gratuites et certainement très efficaces (qt ou un nom comme ça).
Intellectuellement, c'est intéressant de réinventer la roue, mais il on veut se déplacer rapidement, il vaut mieux prendre un vélo, et si on a des sous, acheter une voiture.
Je suis bien d'accord avec vous, mais pourquoi utiliser une librairie dont la plupart des fonctions sont inutiles pour moi ? C'est donc aussi bien d'avoir le code de la fonction, au moins je sais comment cette fonction fonctionne ... apres c'est mon avis
Bonsoir,
Par exemple, voila une raison : vous allez tracer un polygone fermé, constitué de plusieurs côté. Pour faire joli, vous aurez envie d'y mettre une couleur rouge. Là le drame, il y aura un trou dans un des segments et votre écran sera en totalité rempli de rouge.
Il y a très longtemps, j'ai vu l'algorithme qui dessine un segment. J'avoue que je n'ai jamais essayé de faire une telle fonction moi-même.
Il y a des quantités de cas en informatique où il est important de refaire les choses soi-même. La tendance actuelle est exactement contraire, c'est à dire qu'on utilise des fonctions très sophistiquées (langages de haut niveau), ce qui produit les exécutables énormes. Manifestement vous prenez l'option inverse. En tout cas, en matière de graphisme, je déconseille absolument de réécrire les fonctions les plus élémentaires, mais très difficiles, soi-même.
Je voudrais citer un exemple très simple : on veut résoudre un système linéaire de n équations à n inconnues.
La méthode que je trouve "normale" consiste à faire le calcul en utilisant des méthodes connues comme le pivot de Gauss.
La méthode que l'on observe consiste à dire qu'on travaille avec des matrices, on inverse les matrices, on fait du produit de matrice etc.
Enfin c'est mon avis.
Bonsoir,Une autre raison est que SDL attaque directement la carte video, en utilisant les primitives d'un processeur spécialisé. C'est plus rapide qu'un tracé point par point tout en ne dépensant pas de temps de calcul du processeur central.
Et puis ça fait un programme plus petit (Il y a toujours cette fonction-là en moins).
A+
ne serait-ce que pour éviter ça:
et ça:Code:double length = sqrt( x*x + y*y );
alors qu'il n'y a nul besoin de flottant et de racine carrée (vous connaissez le prix d'une racine carrée ? ? ?).Code:for(double i = 0; i < length; i += 1)
Jusqu'ici tout va bien...
Bonsoir,
Et bien moi je dis que l'on fait ce que l'on veut tant que ça fonctionne et que ça correspond a ce dont on a besoin !
Pour la petite histoire il y a quelques temps j'ai cherché une librairie de rendu graphique 2D, un truc tout simple, et bien je n'en ai pas trouvé de bien, des usines a gaz avec toujours 50 paramètres a régler pour afficher un pauvre graphique, il y a en a certaines pour seulement arriver a compiler est déjà un exploit ! Donc de la colère j'ai fait ma propre librairie, une surcouche Xlib pour les fenêtres, les I/O, une surcouche Freetype pour des joli texte, plus d'autres fonctionnalités. Maintenant pour faire un graphique c'est 5 lignes de code, ça fait ce que je veut comme je le veut.
Ce que j'ai fait est certainement très très loin d'être parfait mais ça fonctionne, sinon je fait comment ? j'attends que quelqu'un sorte un librairie qui correspond a ce que je veut ? De toute façon c'est très formateur comme expérience, même si ça montre ce qu'il ne faut pas faire, au moins après on sait bien pourquoi c'est pas bon.
Dernière modification par doul11 ; 20/02/2013 à 21h44.
La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.
Oui, je comprends bien votre colère.
Le cas présent concerne une fonction de très-très bas niveau.
Je crois réellement qu'il faut prendre dans les bibliothèques les fonctions de base et non les fonctions sophistiquées.
Cet exemple de dessin de segments me parait assez intéressant.
Imaginons que l'on cherche à dessiner un arc de cercle. On a la solution qui consiste, si elle existe, à utiliser une fonction qui pourrait s'appeler DessArc(), il y a aussi la solution qui consiste à se dire que un arc peut être une succession de segments.
J'ai évoqué cet aspect des choses avec mon exemple de résolution d'un système linéaire.
Je suis prêt à discuter de ce point dans les détails. En fait mon propos consiste à dire qu'il faut trouver la limite entre "tout refaire" et " utiliser à bon escient ce qui existe".
Je me demande si vous faites allusions à des bibliothèques qui dessine des courbes représentatives de fonctions. Si c'est le cas, il me parait évident que ce type de traitement ne doit pas se faire à partir de bibliothèques existantes, et alors il ne s'agit pas du problème évoqué par le présent sujet.
Salut à tous
Pour moi une ligne est une surface rectangulaire donc la largeur vaut 1 pixel. (voir SdZ : http://www.siteduzero.com/informatiq...degradehttp://)
En espérant vous avoir aidé
Pardon de dire mon avis, sans hésitation et sans contours diplomatique, mais cela me parait une hérésie.Salut à tous
Pour moi une ligne est une surface rectangulaire donc la largeur vaut 1 pixel. (voir SdZ : http://www.siteduzero.com/informatiq...degradehttp://)
En espérant vous avoir aidé
1- une ligne est constituée de segments et d'arc de cercles, de parabole etc.
2- si on veut épaissir la ligne, on trace des parallèles
3- un segment est une portion de ligne droite limitée par 2 points
4- une surface est une zone délimitée par une ligne
5- un rectangle est une zone constituées de 4 segments parallèles et perpendiculaire 2 à 2. En dessin informatique lorsqu'on parle de rectangle, c'est presque toujours lorsque les côtés sont verticaux et horizontaux.
Il serait intéressant de savoir si votre suggestion vient du site du zéro, ou si c'est juste votre idée personnelle. D'ailleurs, d'après ce que j'ai vu sur votre lien, c'est plutôt un rectangle qui est tracé par une succession de segments, en utilisant la fonction rectangle pour une raison que j'ignore (flemme de lire tout l'article)
Actuellement il y a une discussion en cours sur les qualité nécessaires pour être informaticien
Salut,
En effet, la problématique de dessiner un segment m'a rappelé le tutorial du SdZ sur la mise en place d'un dégradé.Il serait intéressant de savoir si votre suggestion vient du site du zéro, ou si c'est juste votre idée personnelle
D'après d'autre recherche, cette parade ne marche que si le rectangle est en position horizontal ou vertical.
Je joint donc un autre lien qui donne un code assez complet sur l'affichage d'un segment en SDL.
http://anomaly.developpez.com/tutoriel/sdl/partie2/
Bonjour,Salut,
En effet, la problématique de dessiner un segment m'a rappelé le tutorial du SdZ sur la mise en place d'un dégradé.
D'après d'autre recherche, cette parade ne marche que si le rectangle est en position horizontal ou vertical.
Je joint donc un autre lien qui donne un code assez complet sur l'affichage d'un segment en SDL.
http://anomaly.developpez.com/tutoriel/sdl/partie2/
Donc, je retire toutes les méchancetés que j'ai dites, et je vous prie de m'excuser.
Bon, effectivement si cette bibliothèque graphique ne dispose pas de la fonction Line() ou LineTo() quelle que soit l'écriture, de quoi dispose-t-elle ?