source: pyromaths/trunk/fuentes/src/pyromaths/classes/Vecteurs.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

File size: 3.3 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Pyromaths
5# Un programme en Python qui permet de créer des fiches d'exercices types de
6# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
7# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22#
23
24
25import math
26import random
27from Racine import simplifie_racine
28
29class Vecteur:
30
31    def __init__(self, x=0, y=0):
32        self.x = x
33        self.y = y
34
35    def __eq__(self, vec):
36        '''Teste l'égalité entre deux vecteurs'''
37        return (self.x == vec.x) and (self.y == vec.y)
38
39    def __add__(self, vec):
40        '''Addition'''
41        return Vecteur(self.x + vec.x, self.y + vec.y)
42
43    def __sub__(self, vec):
44        '''Soustraction'''
45        return Vecteur(self.x - vec.x, self.y - vec.y)
46
47    def __mul__(self, c):
48        '''Multiplication par un nombre'''  # # Besoin du produit scalaire ou du produit vectoriel ?
49        if isinstance(c, float) or isinstance(c, int):
50            return  Vecteur(c * self.x, c * self.y)
51
52    def __rmul__(self, c):
53        '''Multiplication Reverse'''  # # Besoin du produit scalaire ou du produit vectoriel ?
54        if isinstance(c, float) or isinstance(c, int):
55            return  self * c
56    def __neg__(self):
57        '''Négatif d'un vecteur'''
58        return -1 * self
59
60    def __div__(self, c):
61        if isinstance(c, float) or isinstance(c, int):
62            return Vecteur(self.x / float(c), self.y / float(c))
63
64    def __abs__(self):
65        '''Retourne la norme du vecteur sous la forme coeff,radicande où sqrt(n)=coeff*sqrt(radicande)'''
66        return simplifie_racine(self.x ** 2 + self.y ** 2)
67
68    def __str__(self):
69        '''Affichage sous forme de coordonnées'''
70        return '(' + str(self.x) + ',' + str(self.y) + ')'
71
72    def normeTex(self):
73        '''Affichage TeX de la racine simplifiée de la racine, sans les dollars.'''
74        norme = abs(self)
75        if norme[0] == 1:
76            return "\sqrt{" + str(norme[1]) + "}"
77        elif norme[1] == 1:
78            return str(norme[0])
79        else:
80            return str(norme[0]) + "\sqrt{" + str(norme[1]) + "}"
81
82def randvect(a, b):
83    '''Retourne un vecteur aléatoire et s'occupe de placer l'abscisse au-dessus de a et l'ordonnée dans [0,b]. Il faut que b>=10.'''
84    x = random.randint(-5, 5)
85    y = random.randint(-5, 5)
86    posx = a + max(1 - x, 1)  # # 1 colonne minimum d'écart
87    if y >= 0:
88        posy = random.randint(0, math.fabs(y - 2)) + 1  # # Ajouter 1 pour éviter de coller au bas de la grille
89    else:
90        posy = random.randint(math.fabs(y), b)  # # Comme y < 0, cela ne colle pas au bas de la grille
91    return [Vecteur(x, y), posx, posy]
Note: See TracBrowser for help on using the repository browser.