turtle python et les math/geometrie : dur dur...

turtle python et les math/geometrie : dur dur... - Python - Programmation

Marsh Posté le 29-09-2008 à 22:08:55    

bonjours, je cherche a dessiner un triangle isocelle en python via une fonction pour cela j'ai fait:

 
Code :
  1. #!/usr/bin/python
  2. from turtle import *
  3. from math import sin, cos, tan, pi
  4. def makePolygon(distance,angle,faces):
  5. while faces > 0:
  6.  forward(distance)
  7.  left(angle)
  8.  faces -= 1
  9. def makeTriangleIso(distance,angle):
  10. angle_base = (180 - angle) / 2
  11. hauteur =  pow(pow(distance,2) - pow(distance / 2,2),0.5)
  12. distance_base = pow(pow(distance,2) - pow(hauteur,2),0.5) * 1.5 * -1
  13. makePolygon(distance_base,angle_base,1)
  14. makePolygon(distance,180 + angle,2)
  15. left(angle_base * 3)
  16. makeTriangle(60,38.)
 

sachant que je veux:
1: que le triangle soit isocelle (logique)
2: la fonction prends pour argument la distance des coté egaux ainsi que l'angle du sommet
3: qu'en fin de fonction le curseur de turtle se remete a la position de depard
4: que la base soit calculé par la fonction

 

voila :)


Message édité par Adamaru le 29-09-2008 à 22:11:02

---------------
la voie du click est impénétrable
Reply

Marsh Posté le 29-09-2008 à 22:08:55   

Reply

Marsh Posté le 29-09-2008 à 22:17:24    

C'est bien, et quel est ton problème avec tout ça?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-09-2008 à 22:55:35    

le probleme était que je n'arrivais pas a determiner la lonqueur de "distance_base" (la base du triangle)
 
sur les conseils d'un amis j'ai fait:

Code :
  1. def calcRadian(angle):
  2. return angle * pi / 180
  3. def makeTriangleIso(distance,angle):
  4. angle_base = (180 - angle) / 2
  5. hauteur =  pow(pow(distance,2) - pow(distance / 2,2),0.5)
  6. distance_base = 2 * distance * sin(calcRadian(angle) / 2) * -1
  7. makePolygon(distance_base,angle_base,1)
  8. makePolygon(distance,180 + angle,2)
  9. left(angle_base * 3)


 
et le tout fonctione :)


---------------
la voie du click est impénétrable
Reply

Marsh Posté le 29-09-2008 à 23:10:44    

merci d'indenter correctement ton code ...
 
(je pensais jamais dire ca en cat python :/)


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 30-09-2008 à 11:12:18    

j'idente avec des tabs :/ le site les supprime :/


---------------
la voie du click est impénétrable
Reply

Marsh Posté le 30-09-2008 à 11:15:37    

Adamaru a écrit :

j'idente avec des tabs :/


C'est mal.

Adamaru a écrit :

le site les supprime :/


non

Code :
  1. def foo():
  2.     """ foo() -> ()
  3.         do nothing
  4.     """
  5.     pass # this is sparta


Message édité par masklinn le 30-09-2008 à 11:16:52

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-09-2008 à 21:28:07    

tu a identé avec des esapces :/
voila ou j'en suis pour mon code:
http://postit.xiato.com/?show=332
 
cela devrais pouvoir servir a plusieurs personnes :)

Message cité 2 fois
Message édité par Adamaru le 30-09-2008 à 21:29:47

---------------
la voie du click est impénétrable
Reply

Marsh Posté le 30-09-2008 à 21:33:23    

Adamaru a écrit :

tu a identé avec des esapces :/


non.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-09-2008 à 23:04:25    


C'est quoi ce style de documentation [:mlc]

 

En python, les fonctions, classes et modules se documentent avec des docstrings (cf PEP 257 également), c'est très bien de vouloir documenter, mais prière d'utiliser les mécanismes prévus pour ça.

 

Il serait probablement intelligent de créer des objets, aussi, pour stocker les différentes formes, simplifier le code et éliminer des redondances.

 

edit: et les comptages à coup de while() c'est très moche, prière d'utiliser for et range


Message édité par masklinn le 30-09-2008 à 23:06:18

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-10-2008 à 00:58:42    

ce que je reporche a l'outi de documentation fournis c'est de en pas permetre de garder un oeil sur la liste des fonctions
 
une personne ne conaisan pas mon code doit pouvoir conaitre la liste complete des fonctions, ensuite si elle a besoin d'utiliser les fonctions elle a la doc complète
a moi qu'il existe une fonction pour faire la liste des fonctions et des prototypes des fonctions, affichant aussi les arguments requis par celles ci ou la je serais preneur, mon systeme de commentaire me plait bien :)
 
pour les boucles en for et range je ne les ai pas encore utilisées car je debute en python et que je ne me fais pas encore a la syntaxe étant habitué au php et au C


---------------
la voie du click est impénétrable
Reply

Marsh Posté le 01-10-2008 à 00:58:42   

Reply

Marsh Posté le 01-10-2008 à 10:50:54    

Adamaru a écrit :

ce que je reporche a l'outi de documentation fournis c'est de en pas permetre de garder un oeil sur la liste des fonctions


[:petrus75]

>>> import shutil
>>> help(shutil)
Help on module shutil:

 

NAME
    shutil - Utility functions for copying files and directory trees.

 

FILE
    e:\python25\lib\shutil.py

 

DESCRIPTION
    XXX The functions here don't copy the resource fork or other metadata on Mac.

 

CLASSES
    exceptions.EnvironmentError(exceptions.StandardError)
        Error
   
    class Error(exceptions.EnvironmentError)
     |  Method resolution order:
     |      Error
     |      exceptions.EnvironmentError
     |      exceptions.StandardError
     |      exceptions.Exception
     |      exceptions.BaseException
     |      __builtin__.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from exceptions.EnvironmentError:
     |  
     |  __init__(...)
     |      x.__init__(...) initializes x; see x.__class__.__doc__ for signature
     |  
     |  __reduce__(...)
     |  
     |  __str__(...)
     |      x.__str__() <==> str(x)
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from exceptions.EnvironmentError:
     |  
     |  errno
     |      exception errno
     |  
     |  filename
     |      exception filename
     |  
     |  message
     |      exception message
     |  
     |  strerror
     |      exception strerror
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes inherited from exceptions.EnvironmentError:
     |  
     |  __new__ = <built-in method __new__ of type object at 0x1E1CB2E0>
     |      T.__new__(S, ...) -> a new object with type S, a subtype of T
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from exceptions.BaseException:
     |  
     |  __delattr__(...)
     |      x.__delattr__('name') <==> del x.name
     |  
     |  __getattribute__(...)
     |      x.__getattribute__('name') <==> x.name
     |  
     |  __getitem__(...)
     |      x.__getitem__(y) <==> x[y]
     |  
     |  __repr__(...)
     |      x.__repr__() <==> repr(x)
     |  
     |  __setattr__(...)
     |      x.__setattr__('name', value) <==> x.name = value
     |  
     |  __setstate__(...)
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from exceptions.BaseException:
     |  
     |  __dict__
     |  
     |  args

 

FUNCTIONS
    copy(src, dst)
        Copy data and mode bits ("cp src dst" ).
       
        The destination may be a directory.
   
    copy2(src, dst)
        Copy data and all stat info ("cp -p src dst" ).
       
        The destination may be a directory.
   
    copyfile(src, dst)
        Copy data from src to dst
   
    copyfileobj(fsrc, fdst, length=16384)
        copy data from file-like object fsrc to file-like object fdst
   
    copymode(src, dst)
        Copy mode bits from src to dst
   
    copystat(src, dst)
        Copy all stat info (mode bits, atime and mtime) from src to dst
   
    copytree(src, dst, symlinks=False)
        Recursively copy a directory tree using copy2().
       
        The destination directory must not already exist.
        If exception(s) occur, an Error is raised with a list of reasons.
       
        If the optional symlinks flag is true, symbolic links in the
        source tree result in symbolic links in the destination tree; if
        it is false, the contents of the files pointed to by symbolic
        links are copied.
       
        XXX Consider this example code rather than the ultimate tool.
   
    move(src, dst)
        Recursively move a file or directory to another location.
       
        If the destination is on our current filesystem, then simply use
        rename.  Otherwise, copy src to the dst and then remove src.
        A lot more could be done here...  A look at a mv.c shows a lot of
        the issues this implementation glosses over.
   
    rmtree(path, ignore_errors=False, onerror=None)
        Recursively delete a directory tree.
       
        If ignore_errors is set, errors are ignored; otherwise, if onerror
        is set, it is called to handle the error with arguments (func,
        path, exc_info) where func is os.listdir, os.remove, or os.rmdir;
        path is the argument to that function that caused it to fail; and
        exc_info is a tuple returned by sys.exc_info().  If ignore_errors
        is false and onerror is None, an exception is raised.

 

DATA
    __all__ = ['copyfileobj', 'copyfile', 'copymode', 'copystat', 'copy', ...

 


>>>


[:petrus75]

 

Sans compter que les docstrings sont connus par tous les outils python (IDEs et autres), qui peuvent donc les utiliser e.g. quand ils font de l'autocomplétion, et on peut également coller des doctests dans les docstrings pour que les choses soient encore plus claires [:petrus75] Et que c'est le mécanisme standard de documentation Python, inclus directement dans le langage [:petrus75]

 

Objection rejetée.

Adamaru a écrit :

mon systeme de commentaire me plait bien :)


Ya bien qu'à toi qu'il plait, et en python les gens tentent habituellement de ne pas réinventer la roue, surtout quand il existe déjà une meilleure roue inclue.


Message édité par masklinn le 01-10-2008 à 10:53:56

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed