Projet informatique

  • Initiateur de la discussion Initiateur de la discussion wawa96
  • Date de début Date de début
ah moi je met from math import, j'ai appris de cette manière. Merci:cool:
Oui, si tu dis

Code:
import math

tu peux utiliser tous les elements du module math en disant math.<nom-de-l'element>, par ex. math.pi. Si par contre tu dis

Code:
from math import *

tu peux utiliser <nom-de-l'element>, par exemple, pi, directement.

La difference entre les deux, c'est qu'avec "import math" tu ne pollues pas ton namespace avec tout le contenu de "math". Avec "from math import *", tu pollues ton namespace.

C'est pour ca que "import <nom-du-module>" est preferable.

Ca joue un role quand ton programme utilise les memes noms que ce qui se trouve dans un module. Supposes par exemple que tu ais definit ta propre version de la fonction sin(). Si tu fais "import math", tu peux differencier entre ta fonction sin(...) et la fonction sin de math: math.sin(...). Si par contre t'avais fait "from math import *", il y aura une collision entre ta fonction sin() et celle du module math.
 
hmm je code en Windows, mais je ne vois pas pourquoi tu as mis "math.pi" dans ton code, ce n'est pas mieux de déclarer les variables H (hauteur), L (grande longueur), l (petite longueur)???
farid_h a expliqué pour math.
Pour ma part, il me semble plus propre d écrire math.pi que import pi from math et n utiliser que pi.
De mon point de vue de débutant, je sais que l utilise le pi de math, et non une variable quelconque que j aurai moi même redéfinie.
Et c est plus facile a debugger.
Mais bon ... C est le premier truc que j écris en python, faut voir l opinion de farid_h, il ena l habitude.
Si je n ai pas utilisé H, L et l, c est tout simplement parce que j ai fait un calcul de surface d un carré, pas le volume d un parallélépipède rectangle :)
Donc un coté suffit.
C est pas ce qui est important en tant qu exemple.
La boucle while pour vérifier la validité d un choix me semble plus intéressante au niveau didactique.
Ainsi que le calcul d aire en utilisant Coté au carré (Cote**2), au lieu de Cote*Cote .
Idem, voir avec round() pour les valeurs numériques, c est tout un sujet a part entière d après ce que j ai lu vite fait.
J ai remarqué que python traite tout comme des strings avec \n a la fin. J essaye de faire une applet Gnome avec pygtk, et j ai du assigner des valeurs numériques a certains endroits, avec valeur = float(valeur) , afin d effectuer de simples opérations.
Ces caractères ne sont pas les mêmes sous MacOS et Windows. Ça peut être \r ou \n\r .
Je ne connais pas plus, que toi, je ne fait que lire les docs :)
Je suis sous Linux ou FreeBSD, ça dépend l humeur.

PS : geany est vraiment pas mal pour debugguer les applets, il permet de rediriger les print vers un terminal ...
 
C est le même principe, mais il faut faire attention lors des divisions.

For the Python 2.x series, / does "floor division" for integers and longs (e.g. 5/2=2) but "true division" for floats and complex (e.g. 5.0/2.0=2.5). For Python 3.x, / does "true division" for all types.[1][2]
This can be fixed by putting a round([math]-0.5) around a normal division sign, because of a Python error causing round(0.5) to round down.
http://en.wikibooks.org/wiki/Python_Programming/Basic_Math

En python2.7:
>>> 4/3
1

>>> 4.0/3.0
1.3333333333333333

Donc
Volume_Sphere = (4.0/3.0)*math.pi*(Rayon**3)

>>> Rayon = 2
>>> Volume = (4.0/3.0)*math.pi*(Rayon**3)
>>> print Volume
33.5103216383

Mais ça c est vraiment des trucs de base. C est toi qui doit apprendre python :)
C est en cherchant dans les docs que tu trouvera, avoir un corrigé n est absolument pas constructif a ce niveau la de débutant.

Je répète, je n ai jamais rien écrit en python, c est la première fois que j essaye :)
Si j y arrive, tu dois y arriver aussi, d autant plus que je suis nul en code.

Du coup, j essaye d écrire un petit programme, ça occupe.
Je tente de convertir mon réglage de luminosité du portable écrit en Tk en une applet Gnome.
Tu codes sous quel environnement ? Windows ou Unix ?
J ai trouvé geany comme éditeur, ça n a pas l air mal sans être trop lourd.
http://geany.org/
en fait le but c'était de créer des fonctions avec def, en gros il veut voir si on sait en créer (le prof)
 
hmm interessant tu fais des interfaces avec TK? je l'ai pas encore essayé
C est hyper simple !!!
Et ça peut appeler du code d un autre type.
C est sur que comme tout langage, au début c est un peu la galère ...
Il faut avoir une vision claire de l agencement des frames qu on veut avoir, mettre des noms explicites pour s y retrouver dans le code, etc. Comme avec tous les langages en fait.
Avantages :
- langage interprété donc facilement modifiable avec un simple éditeur de texte, multiplateforme ( Win, Unix****, Mac)
- syntaxe très simple
- grande richesse de la bibliothèque
Inconvénients :
- pas forcement "joli" en ce qui concerne le look.
- comme c est interprété, c est un peu lourd pour des gros programmes.

Il y a même un gestionnaire de fichier complet écrit avec ça, mais il n existe que pour Unix je pense.
Je m étais amusé a écrire un petit truc pour commander le port parallèle bit a bit, avec des routines de base écrites en C.
Ça dessine le chronogramme aussi.
C était pour débuguer un convertisseur analogique/numérique 12 bits et 8 canaux fait maison, dans le but de créer un tableau de bord sur écran 7 pouces pour une auto ancienne, relié a des capteurs de température, pression, rotation, etc :)




en fait le but c'était de créer des fonctions avec def, en gros il veut voir si on sait en créer (le prof)
C est les premières les plus dures.
Après, le principe est toujours le même :P
 

Pièces jointes

  • portfr10.png
    portfr10.png
    16.4 KB · Affichages: 4
Il y a des lignes logiques et des lignes physiques:

2. Lexical analysis — Python 2.7.9 documentation
Salut ca va???

Ca fait longtemps, j'ai avancé dans mon projet avec Pov-ray mais j'ai un gros blocage je ne peux plus avancer, et le pire c'est que je dois présenter ce travail de fin d'études dans 2 mois devant mes profs (qui s'y connaissent pas en Pov-ray, devant un jurie externe et quelques étudiants).
Donc je te recontacte pour savoir si tu connaîtrais pas un pro de Pov-ray (ils sont rares lol), ou un connaisseur qui s'y connait pas mal pour m'aider à surmonter ces blocages dans mon code. Vous me sauvez la vie si c'est le cas. donnez moi des infos pour que je puisse le contacter si vous connaissez quelqu'un.

#URGENT
Merci.
 
Salut ca va???

Ca fait longtemps, j'ai avancé dans mon projet avec Pov-ray mais j'ai un gros blocage je ne peux plus avancer, et le pire c'est que je dois présenter ce travail de fin d'études dans 2 mois devant mes profs (qui s'y connaissent pas en Pov-ray, devant un jurie externe et quelques étudiants).
Donc je te recontacte pour savoir si tu connaîtrais pas un pro de Pov-ray (ils sont rares lol), ou un connaisseur qui s'y connait pas mal pour m'aider à surmonter ces blocages dans mon code. Vous me sauvez la vie si c'est le cas. donnez moi des infos pour que je puisse le contacter si vous connaissez quelqu'un.

#URGENT
Merci.
Je reponds la semaine prochaine, okay? Tu peux deja commencer par expliquer le probleme...
 
Je reponds la semaine prochaine, okay? Tu peux deja commencer par expliquer le probleme...
Bah étant en train de réaliser une roue dentée, à partir d'un code trouvé sur internet, y a déjà premièrement une partie du code que je ne saisis pas, et donc ca m’empêche d'avancer dans mon projet, et la fin de l'année qui approche à grands pas:timide:

Un peu d'aide me sauverai mon année et me fera réussir tranquillement haut la main, d'autant plus que je dois expliquer le code, donc je ne suis pas sorti de l'auberge:defonce:
 
Bah étant en train de réaliser une roue dentée, à partir d'un code trouvé sur internet, y a déjà premièrement une partie du code que je ne saisis pas, et donc ca m’empêche d'avancer dans mon projet, et la fin de l'année qui approche à grands pas:timide:

Un peu d'aide me sauverai mon année et me fera réussir tranquillement haut la main, d'autant plus que je dois expliquer le code, donc je ne suis pas sorti de l'auberge:defonce:
Okay, laisses voir le code (ou l'adresse du code), je vais jetter un coup d'oeil. :)
 
De l'utilité de commenter son code :)
Lesson 1 ...
Même si pour nous même ça parait évident sur le moment, parfois 2 mois après on a oublié quelle démarche pourtant logique on a suivi.
Alors si en plus on doit relire le code non commenté d'un autre, c'est horrible :)
# il faut toujours commenter \
# son code ... */ ou /* aussi.
 
à mon avs j'ai besoin d'un professionel qui m'explique chaque ligne du code...
Essayes les exemples dans le tuto pour comprendre comment CSG fonctionne. Avant d'avoir fait ca, tu ne comprendras pas non plus les explications des pros. Il faut voir les resultats de ces exemples en images pour comprendre... ;)
 
@wawa96, t'as compris le principe de la difference de deux objets?

Dessines par exemple la difference d'une sphere, et d'un cylindre qui a un radius inferieur a celui de la sphere et d'une longueur plus grande que le diametre de la sphere et qui traverse le milieu de la sphere. Le resultat est une sphere percee avec un trou en forme de cylindre. Tu ne vois que la sphere avec le trou cause par le cylindre. Le cylindre lui-meme est invisible.

Alors, ta construction compliquee n'est rien d'autre que la difference entre quelquechose comme un cylindre visible avec une couleur doree, et des objets invisibles qui font des trous dans le bord de ce cylindre. L'effet general est une roue avec des dents.

T'as au moins compris ce principe?92431
 

Pièces jointes

  • csg2.jpg
    csg2.jpg
    19 KB · Affichages: 5
Dernière édition:
Voici encore un autre exemple:

92432

Le premier objet a gauche en haut est l'union d'une sphere et d'un cube, le deuxieme objet est l'intersection de la sphere et du cube, le 3eme est la difference d'une sphere visible et d'un cube invisible, et le 4eme (le plus interesssant a droite en haut) est la difference du cube visible et de la sphere invisible.
 

Pièces jointes

  • csg.png
    csg.png
    39.3 KB · Affichages: 5
@wawa96, t'as compris le principe de la difference de deux objets?

Dessines par exemple la difference d'une sphere, et d'un cylindre qui a un radius inferieur a celui de la sphere et d'une longueur plus grande que le diametre de la sphere et qui traverse le milieu de la sphere. Le resultat est une sphere percee avec un trou en forme de cylindre. Tu ne vois que la sphere avec le trou cause par le cylindre. Le cylindre lui-meme est invisible.

Alors, ta construction compliquee n'est rien d'autre que la difference entre quelquechose comme un cylindre visible avec une couleur doree, et des objets invisibles qui font des trous dans le bord de ce cylindre. L'effet general est une roue avec des dents.

T'as au moins compris ce principe?92431
meme ca j'ai pas pigééé
 
meme ca j'ai pas pigééé
Si tu dessines 2 objets normalement, les deux objets sont visibles (a moins que l'un soit cache par l'autre). Maintenant imagines toi que tu es un sculpteur: tu creuses un trou dans un objet. Tu obtiendras quoi? Un objet avec un trou, n'est-ce pas? Penses par ex. a la sphere avec un trou au milieu comme dans l'image plus haut.

Pour faire ca, tu dis a peu pret en pseudo-code:

Code:
difference {
    sphere <...>,
    cylinder <....>
}

La sphere sera visible, mais le cylindre que tu auras sculpte de la sphere, c.a.d. que tu auras enleve, par ex. avec un outil sous forme d'un cylindre, sera invisible. Le trou aura la forme d'un cylindre.

Pour l'autre exemple: le cube troue dans la premiere ligne tout a fait a droite, tu dis:

Code:
difference {
    box <...>,
    sphere <....>
}

Le cube (box) sera visible, mais la sphere a l'interieur du cube qui est legerement plus grosse que le cube, sera soustraite du cube, c.a.d. que le cube sera creux.

C'est tres important de comprendre de concept. Ta roue avec des dents sera conceptuellement:

Code:
difference {
    cylinder <...>,   /* un cylindre en or assez plat, visible */
    box <...>,    /* objet qui fait un trou entre dent 1 et dent 2, invisible */
    box <...>,    /* objet qui fait un trou entre dent 2 et dent 3, invisible */
    /* etc... */
    box <...>,    /* objet qui fait un trou entre dent 10 et dent 1, invisible */
}

Au lieu de cubes (box), tu peux aussi choisir d'autres formes a supprimer du cylindre dore.
 
Dernière édition:
Le code parle "d'extrusion".
Il enlève au cercle les 9 segments grâce a leurs coordonnées en x et y calculées en fonction de Pi/2 , si je comprend bien.
C'est a cause de Pi/2 que je pensais qu'il y a 40 dents, et que la manip était répétée quelque part pour faire 2Pi.
Mal lu ...
C'est a peu près tout ce qu'il fait, le reste c'est de l'emballage, si je comprend bien.
Il faut replonger dans la trigonométrie :)
Si je saisi le truc, on se place sur le cercle a l'origine, puis trace les dents avec l'appel de translate<>
M'enfin ce que j'en dit .. C'est pour participer :)

Il me semble que le mieux est de comprendre pour la premiere dent :
#declare x1 = d*sin(((pi/2)/9)*1);
#declare y1 = d*cos(((pi/2)/9)*1);
#declare z1 = 0;

On s'en fout de z dans tous, il n est pas concerné.
On définit les coordonnées en x et y grâce a sin et cos rapportés a Pi/2, et le tout divisé par 9 puisqu'on veut 9 dents au total.
Je n'ai pas détaillé.
Pour aidera visualiser, il peut être utile de définir un diamètre d de 1, et faire les calculs d'angle.
 
Dernière édition:
@Nalinux, je dois d'abord revoir le code. J'ai explique a @wawa96 le principe general. S'il comprend ce principe, l'appliquer dans ce cas particulier est facile: il suffit de fair le tour de la circonference du cylindre a percer, et tout les (2*pi)/10 radians, il place un trou au bord du cylindre. Le resultat sera une roue avec des dents. Mais bon, faudra revoir le code.
 
@Nalinux, je dois d'abord revoir le code. J'ai explique a @wawa96 le principe general. S'il comprend ce principe, l'appliquer dans ce cas particulier est facile: il suffit de fair le tour de la circonference du cylindre a percer, et tout les (2*pi)/10 radians, il place un trou au bord du cylindre. Le resultat sera une roue avec des dents.
J ai édité au dessus.
Je ne connais pas le langage. Mais il semble que une fois qu'on a les coordonnées des points, pour chaque dent, on se décale du cercle avec translate<>.
J'avoue que déchiffrer un code quand on ne connait pas le langage peut être hasardeux :)
Mais le principe semble la.
 
Mathematiquement, ca aurait ete plus facile de faire comme ca:

1. On centre le cylindre a percer a l'origine <0,0,0> a fin qu'il soit couche sur la surface x-y
2. On utilise des coordonnees polaires pour calculer la position des trous entre les dents (r reste constant, phi est incremente par 2*pi/10)
3. On converti les coordonnees polaires en coordonnees cartesiennes (avec sin et cos)
4. On applique l'operateur "difference" avec ces coordonnees cartesiennes pour obtenir un objet composite avec les trous
5. On applique une ou plusieurs rotation(s) du cylindre perce composite si necessaire
6. On translate finalement le cylindre perce composite et tourne la ou on veut le placer.

C'est peut etre ce que le programme fait (?)
 
Dernière édition:
Mais je ne comprends pas la signification du premier difference{, il sert à quoi en fait dans mon code, car après on donne juste les dimensions de la roue, diametre, nombre de dents etc...
 
Mais je ne comprends pas la signification du premier difference{, il sert à quoi en fait dans mon code, car après on donne juste les dimensions de la roue, diametre, nombre de dents etc...
Remplaces (temporairement) cette difference par union, et compares les resultats. Comme ca, tu verras concretement ce qui est supprime. Ou, pour le dire autrement, tu verras les objets invisibles, et tu comprendras ce que cette difference fait.
 
Remplaces (temporairement) cette difference par union, et compares les resultats. Comme ca, tu verras concretement ce qui est supprime. Ou, pour le dire autrement, tu verras les objets invisibles, et tu comprendras ce que cette difference fait.
Je l'ai fait on me montre un gros cylindre gigantesque

question, je voudrais enlever la partie des dents visibles à l'intérieur du cercle, de tel sorte que que je voudrais avoir un trou vide au milieu de ma roue avec les dents à la surface sans rien à l'intérieur, comment je fais ça?
 
Je l'ai fait on me montre un gros cylindre gigantesque

question, je voudrais enlever la partie des dents visibles à l'intérieur du cercle, de tel sorte que que je voudrais avoir un trou vide au milieu de ma roue avec les dents à la surface sans rien à l'intérieur, comment je fais ça?

Code:
difference {
    cylinder { <x,y,z_low>, <x,y,z_high>, radius1 },
    cylinder { <x,y,z_low-5>, <x,y,z_high+5>, radius2 }
}

/* avec radius2 < radius1. */

Tu dessines deux cylindres, l'un dans l'autre; un ayant un radius plus petit que l'autre, mais plus long en longueur. Si tu fais union, tu vois 2 cylindres; si tu fais difference, tu vois le cylindre exterieur avec un trou au milieu, cause par le cylindre plus petit de l'interieur.

Documentation de la commande cylinder:

POV-Ray: Documentation: 2.4.1.4 Cylinder

Bien sur, tu devras supprimer le materiel a l'exterieur du cylindre ayant le plus grand radius pour obtenir les dents a l'exterieur.

Edit: la raison pourquoi j'ai fait +5 et -5 : http://www.f-lohmueller.de/pov_tut/csg/povcsg3e.htm
 
Dernière édition:
Retour
Haut