Tracer de courbes pendant des calculs

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
GUELLIL
Messages : 12
Inscription : ven. 05/mai/2006 21:33

Tracer de courbes pendant des calculs

Message par GUELLIL »

Bonjour à tous,
Désolé de poser une question que vous jugerez probablement hyper basique (quand je vois les questions posées sur les accès aux ressources système et autres friandises de ce genre).
J'ai acheté ma licence PB en 2005 et je m'en sers régulièrement depuis pour des calculs scientifiques complexes, qui sont souvent itératifs et qui peuvent durer plus d'une heure dans certains cas. PB est facile à programmer pour ce genre de calculs et à debugger. Il est aussi très rapide en exécutuon. Le gros problème pour moi c'est l'affichage des résultats. Je me contente en général de sortir des fichiers texte que j'exploite ensuite directement ou avec Excel.

Quelqefois j'ai besoin de voir des courbes se tracer pendant que les calculs s'exécutent ou des figures se dessiner, et là c'est la galère. En PB version 4.00 j'avais fini par trouver des solutions satisfaisantes.
J'ai eu la mauvaise idée de passer en PB 4.3 Béta et je ne m'en sors plus. On ne peut rien faire sans déclarer des gadgets et sans ouvrir des images avant de dessiner le moindre trait et ces fenêtres sont difficiles à, gérer. C'est extrèmement puissant pour ceux qui font des jeux et qui manipulent du graphique de haut niveau, mais pour tracer des courbes simples les bonnes vieilles fonctions Plot, Line et autres Draw des bons vieux logiciels du passé style TurboBasic de Borland allaient très bien. Malheureusement ils ne tournent plus sous XP.

Encore une fois je suis désolé de vous ennuyer mais je vous remercie d'avance de m'indiquer des Tutos pour tracer des courbes pendant l'exécution de calculs faits par des boucles imbriquées.
Merci.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Alors là je ne comprends rien. Qu'y-a-t-il comme différence entre ces deux versions à ce niveau? Que rencontres-tu comme problème? Tu ne pourrais pas nous donner un petit exemple de ce que tu faisais avant et qui ne tourne plus maintenant? Nous serions alors mieux à même de t'aider.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Tracer de courbes pendant des calculs

Message par Backup »

.....
Dernière modification par Backup le mar. 19/août/2014 12:37, modifié 1 fois.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message par kernadec »

bonjour
j'avais trouver ca aussi je sais plus où?
si ca peut t'aider?
au revoir

Code : Tout sélectionner

OpenWindow(0,0,0,800,600,"",$CA0001)
InitSprite()
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)

*points=AllocateMemory(2*4*4)
PokeL(*points,100)    ;start
PokeL(*points+4,100)

PokeL(*points+8,300)  ;control
PokeL(*points+12,20)

PokeL(*points+16,500)  ;control
PokeL(*points+20,580)

PokeL(*points+24,700)  ;end
PokeL(*points+28,500)
hdc=StartDrawing(ScreenOutput())
  FrontColor(#White)
  PolyBezier_(hdc,*points,4)
StopDrawing()

Repeat
Until WaitWindowEvent()=16 
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Salut kernadec,

Géniale la fonction Polybezier.
Tu l'as trouvée ou ? J'en cherchais une dans PB mais n'en ai jamais trouvée...
J'ai essayé de la mettre dans un DrawingMode mais rien ne s'affiche : je ne dois pas mettre les bons paramètres à la place de ton hdc... :?
Tu vois de quoi ça peut venir ?
Merci de ton aide : avec PolyBezier, je veux faire des lasers de la mort qui se dirigent sur l'ennemi avec un bel effet de courbure....bref c'est essentiel !!!!

A bientôt

Code : Tout sélectionner

 If StartDrawing(ScreenOutput())
      DrawingMode(1)
    
    *points=AllocateMemory(2*4*4) 
PokeL(*points,100)    ;start 
PokeL(*points+4,100) 

PokeL(*points+8,300)  ;control 
PokeL(*points+12,20) 

PokeL(*points+16,500)  ;control 
PokeL(*points+20,580) 

PokeL(*points+24,700)  ;end 
PokeL(*points+28,500) 
;hdc=StartDrawing(ScreenOutput()) 
  FrontColor(#White) 
  PolyBezier_(DrawingMode(1),*points,4) ou  PolyBezier_(1,*points,4) ou PolyBezier_(ScreenOutput(),*points,4)  
      StopDrawing() 
Only PureBasic makes it possible
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

la doc est là
http://msdn.microsoft.com/en-us/library ... S.85).aspx

les fonctions avec un underscore sont des fonctions de l'api , il faut se référer à la doc de l'api.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
GUELLIL
Messages : 12
Inscription : ven. 05/mai/2006 21:33

Message par GUELLIL »

Bonjour,
Primo, merci à tous d’avoir répondu à une question aussi basique, et aussi vite.
Secundo, je sais que PureBasic a des fonctionnalités graphiques extrêmement puissantes. Il suffit de regarder le jeu des commandes disponibles et de parcourir le forum. Je suis donc un fan de PureBasic même si je n’en utilise qu’un millionième et j’en parle beaucoup dans mon entourage. J’avais même prévu de faire à Noël une donation à Fantaisie SW pour encourager Fred dans son travail génial.

Par contre j’ai des difficultés avec les fenêtres graphiques, déjà parce que « je viens d’un autre siècle et d’un autre millénaire ». Je faisais déjà de la programmation en 1967, en Fortran. Je me suis remis à la programmation en 2005 pour réaliser les outils informatiques dont j’ai besoin dans mes bricolages en micro-mécanique et en horlogerie dont je suis passionné. Cela débouche sur de la conception et bientôt sur de la commande numérique.
Actuellement j’écris un programme pour définir le profil d’outils de taillage d’engrenage. C’est un tout petit programme par rapport à d’autres que j’ai déjà écrits. Il fait une centaine de ligne mais le dossier d’analyse fonctionnelle fait une quinzaine de pages assez denses.
Il s’agit de réaliser l’intersection informatique (en 2D) d’une crémaillère de référence (définie par la Norme) et d’un disque à tailler. Il en résulte un objet (vectoriel, pas bitmap, en coordonnées polaires) qui correspond à une dent de l’engrenage taillé et un autre objet qui correspond à l’outil qui servira à tailler cette dent. Ce programme est écrit et j’en suis à sa validation par rapport au dossier d’analyse. Voila pourquoi je veux visualiser la progression de l’íntersection.
Ensuite j’écrirai un programme qui à partir de la dent unique reconstituera les engrenages complets et les fera engrener pour vérifier leur fonctionnement, avant de les tailler physiquement
Vous m’avez demandé de dire quel était mon problème. Pour faire simple ce bout de programme a le squelette suivant :

SAISIE DES DONNEES : (en mode console) : nombre de dents, module, angle de pression, déport de denture.
CREATION DES OBJETS DE BASE : Crémaillère de référence et disque ébauche.
REPEAT (Boucle d’intersection des deux objets)
FOR (Boucle sur les vecteurs de la crémaillère)
FOR (Boucle sur les vecteurs du disque qui doit être taillé)
Intersection des objets 2D et calcul des vecteurs de l’objet taillé.
Visualisation des objets pendant l’intersection (c’est cette partie qui merde)
NEXT
NEXT
UNTIL
SORTIE DES FICHIERS TXT : des objets créés, afin de les reprendre ensuite dans d’autres programmes de traitement.

Tout est écrit et fonctionne mais avec des erreurs que j’ai détectées par des visualisations off-line.
Il doit y avoir des erreurs d’écriture dans les équations. Je debuggerais plus vite si je pouvais visualiser on-line. Je n’arrive pas à garder la fenêtre ouverte pendant l’exécution des boucles. Il faut pouvoir dessiner des bouts de lignes entre des phases de calcul.
@+

PS : ces fonctionnalités existent bien sûr dans les logiciels de CAO, mais je ne veux ni les acheter ni les pirater.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Bonjour Guellil,

Interressant la simulation d'engrenage.
J'ai fait un tour rapide sur la toile et j'ai trouvé ça :
http://www.mathcurve.com/courbes2d/engr ... nage.shtml

A bientôt
Only PureBasic makes it possible
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.....
Dernière modification par Backup le mar. 19/août/2014 12:38, modifié 1 fois.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

la doc est là
http://msdn.microsoft.com/en-us/library ... S.85).aspx

les fonctions avec un underscore sont des fonctions de l'api , il faut se référer à la doc de l'api.
Ok Comtois, merci ça marche : je n'avais encore jamais testé les API sous PureBasic et je ne savais pas que cette fonction en était un...

Merci Dobro pour tes exemples !

ça élargit encore plus le champ du possible...
Bon, ce soir ma douce et belle épouse mange au resto avec ses copines, je couche les enfants avant 20h30 et soirée PureBasic !!!!
Only PureBasic makes it possible
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message par kernadec »

bonjour
pour rendre a césar : l'auteur est " Derek "
j'ai retrouver ou j'avais obtenu ce code en effectuant une recherche PolyBezier_ sur le site anglais
mais il a d'autres exemples avec cette recherche PolyBezier_
http://www.purebasic.fr/english/viewtop ... polybezier
au revoir
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

GUELLIL> C'est très intéressant tout ça! Je suis sûr à 100% que l'on peut résoudre ce problème. J'imagine que tu ne dois pas avoir très envie de montrer ton code, sans doute pour des raisons de confidentialité ou d'autres plus personnelles. Cependant, tu pourrais l'envoyer (en partie) à l'un d'entre nous, en message privé, afin que l'on jette un œil. Notre cher modérateur, moi-même ou d'autres pourrions alors, sans trop de risque pour toi, déterminer la cause exacte de ce qui ne fonctionne pas et te répondre précisément. Il y a de trop nombreuses sources d'erreur pour que nous puissions deviner d'une façon générale ce qui ne va pas. En plus, vu que tu travailles en vectoriel, nous pourrions te suggérer certaines choses, comme par exemple l'utilisation de GDI+ qui fait des miracles, ou d'autres astuces qui sont moins connues.

A part ça, figure-toi que je devrai tantôt travailler sur un programme écrit à l'origine en Fortran et tes compétences pourraient vraiment m'être utiles! D'autant que ça a été écrit par un mathématicien polonais :lol:
GUELLIL
Messages : 12
Inscription : ven. 05/mai/2006 21:33

Message par GUELLIL »

Ca y est. J'ai déplacé l'ouverture de la fenêtre en-dessous de la deuxième boucle For Next, juste au dessus du Until de la boucle repeat.
J'ai droit à un flash de la fenêtre pendant tous les cycles de le boucle Repeat (c'est naze et fatiguant pour les yeux mais cela m'a permis de trouver l'erreur). Une simple erreur bête de frappe qui avait modifié la coordonnée d'un segment de la crémaillère et cet "allien" venait massacrer le profil de le dent taillée.

Tout marche merveilleusement. Je vais voir comment je peux demander au programme d'enregistrer une image de la roue en cours de taille et une autre à la fin de la taille et je vous les posterai.
Je n'ai pas encore analysé les codes que vous avez postés, mais je suis sûr que j'y trouverai des instructions qui me permettront de progresser.
Je vous en remercie donc.
@+
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Cool :)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

GUELLIL a écrit :Je me contente en général de sortir des fichiers texte que j'exploite ensuite directement ou avec Excel.
Pour afficher toutes sortes de courbes dans le style d'Excel, il y a aussi la possibilité d'utiliser RMCHART.
Flype avait fait un wrapper : http://www.purebasic.fr/french/viewtopic.php?t=5075
Image
Répondre