Triangle de penrose et classe

Résolu
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011 - 16 oct. 2007 à 22:05
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 17 oct. 2007 à 19:12
Bonjour à toutes et à tous,
j'aurais aimé savoir comment commencer le début de mon code en rapport avec les triangles de penrose (un triangle de penrose est un triangle isocèle ayant pour coté isocèle la longueur du nombre d'or)
Pour celà j'ai créé une classe penrose, point et triIso, n'étant qu'au début de mon aprentissage je ne maitrise pas encore le langage et j'ai donc quelques problèmes de codage...
je vous mets ci-dessous ma classe Point :

// Point.cpp: implementation de la classe Point
//
//////////////////////////////////////////////////////////////////////

#include "Point.h"
#include

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

using namespace std;

Point::Point(double abs,double ord)
{
    x = abs;
    y = ord;
}

void Point::Affiche()
{
    cout<<"Abscisse :"<< x <<"Ordonnée :"<< y <<endl;
}

Point::~Point()
{

}

double Point::getx(){
    return(abs);
}

void Point::setx(double x){
    x = abs;
}

double Point::gety(){
    return(ord);
}

void Point::sety(double y){
    y = ord;
}

// Point.h: Interface de la classe Point.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_POINT_H__1158B4D8_4436_4C81_AA39_2EC96B8CD085__INCLUDED_)
#define AFX_POINT_H__1158B4D8_4436_4C81_AA39_2EC96B8CD085__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Point 
{

private :
    double x,y;

public:
    Point(double,double);
    double getx();
    void setx(double);
    double gety();
    void sety(double);
    void Affiche();
    virtual ~Point();

};

#endif // !defined(AFX_POINT_H__1158B4D8_4436_4C81_AA39_2EC96B8CD085__INCLUDED_)

J'aurais donc aimé savoir si mon constructeur était correct et si les accesseurs des membres privés de la classe aussi?

car visual studio me met 3 erreurs qui sont les suivantes :

Erreur    1    error C2440: 'return' : impossible de convertir de 'int (__cdecl *)(int)' en 'double'    d:\iut\2eme année\poo 2eme année\penrosetp1\point.cpp    31   
Erreur    2    error C2440: '=' : impossible de convertir de 'int (__cdecl *)(int)' en 'double'    d:\iut\2eme année\poo 2eme année\penrosetp1\point.cpp    35   
Erreur    3    error C2065: 'ord' : identificateur non déclaré    d:\iut\2eme année\poo 2eme année\penrosetp1\point.cpp    39   

Si vous pouviez me dire d'ou vient le problème se serait gentil.

qui plus est pour la suite du projet je ne sais pas comment implémenter ma classe TriIso par rapport à la classe Point....
si vous aviez des idées....
Pour penrose celà découlera de triIso car elle en hérite

Voilà, merci pour ceux qui pourront m'aider

Cordialement, ichigoZ710

28 réponses

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 19:12
Re

Ces 2 méthodes tu les déclares en méthodes privées de penrose et tu les utilises dans le constructeur de penrose.
Et pour faire de l'héritage, tu devrais relire ton cours.
Fin je vais devoir aller là manger,
je reviens au pire demain  si tu as des autres questions je regarderais.


=

Une autruche ne se cuit pas aux petits lardons
3
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
16 oct. 2007 à 22:18
Bonsoir,

Bon déjà faut que tu te mettes d'accord avec toi même, car les coordonnées du point s'appellent x/y ou abs/ord ?
- si je regarde le .h c'est x/y
- si je regarde le .cpp c'est abs/ord
- tu mélanges les affectations aussi
- "a = b;" signifie que la valeur de "b" va être mise dans la variable appelée "a"
(ce qui est pas le cas dans setx ou sety)
- et il y a une fonction abs qui existe déjà
- je me demande si c'est pas ça qui le gêne sur une des erreurs

Ok  bon ensuite la classe triIso:
- un triangle isocèle c'est trois points avec des contraintes et  une fois que tu récupères les trois points, il faut que tu vérifies que ab=ac (si le triangle est isocèle eça pourrait même être une méthode du point, à toi de voirn a)
- calculer une distance entre deux points c'est pas dur
- ça pourrait même être une méthode du point, à toi de voir

=

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
16 oct. 2007 à 22:28
Donc tu me conseille de les déclarer comment car je croyais pourtant que d'après ce que j'avais demander à d'autres c'était comme ca qu'il fallait le faire.
Pour les autres méthodes ca confirme ce que je pensais!
Mais j'ai toujours eu des problèmes avec les constructeurs, accesseurs et autres... et j'arrive pas à m'y habituer hihihi
Donc à quoi ressemblerait le constructeur et un set pour toi?
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
16 oct. 2007 à 22:33
Re,

Ok ben tu les appelles partout x et y, et tu enlèves ces abs et ord
_ dans le constructeur je mettrais
 Point:oint(double x, double y) {
   this.x = x;
   this.y = y;
}
void Point::setdouble x) {
   this.x = x;
}

Une autruche ne se cuit pas aux petits lardons
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
16 oct. 2007 à 22:35
setX ( double x ) <-- mal affiché le code

Une autruche ne se cuit pas aux petits lardons
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
16 oct. 2007 à 22:36
idem mal affiché pour ce code

Point :: Point(double x, double y) {

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
16 oct. 2007 à 22:39
Je venais de faire ce constructeur est-il valable? :

Point::Point(const Point & p){
    x = p.x;
    y = p.y;
    cout << "appel du constructeur par recopie" << this << " "<< x <<" "<< y <<endl;
}
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
16 oct. 2007 à 22:43
Avec votre méthode celà me génere une erreur partout où se trouve this.variable qui me dit celà :
Erreur    5    error C2228: la partie gauche de '.y' doit avoir un class/struct/union    d:\iut\2eme année\poo 2eme année\penrosetp1\point.cpp    49   
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
16 oct. 2007 à 22:47
re
Votre constructeur de copie est bon, mais l'autre le mien c'était le constructeur normal. Donc en résumé à votre erreur, si je la comprends bien, je me demande s'il serait pas plus judicieux de tester this->x
this->x = x au lieu de this.x
vous voyez ?
Je dois déconnecter, je reviens demain.
Au pire, je vous souhaite de trouver d'autres personnes présentes pour une autre aide.
=

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
16 oct. 2007 à 22:58
ca a fonctionné merci
je vous tiens au courant pour la suite du code car je risuqe d'avoir encore besoin d'aide hihihi
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
17 oct. 2007 à 14:14
Bonjour,
j'ai cette erreur :

Erreur    1    error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup    LIBCMTD.lib   
Erreur    2    fatal error LNK1120: 1 externes non résolus    .\Debug/penroseTP1.exe   

Je ne sais pas du tout comment la résoudre...je n'arrive pas à trouver de quoi ca vient
Si vous avez besoin des sources dites le moi je refairais un poste dans la seconde

merci d'avance pour votre aide
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 14:54
Bonjour,

Est-ce que tu compiles un programme windows ou un programme DOS ? est-ce que tu as plusieurs fichiers .c dans ton projet ? C'est parce que la fonction WinMain, je vois pas d'où elle sort..

=
Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
17 oct. 2007 à 14:58
c'est bon j'ai résolu le problème ca venait du faite que j'étais pas en console....
enfin bon vive windows... lol et surtout visual

merci quand même
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 15:06
Ah voila pourquoi, moi visual... lol :p

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
17 oct. 2007 à 15:37
Bonjour, de nouveau je vous embetes :
je dois maintenant coder la classe TriIso et la un problème se pose :

TriIso(Point a,Point b,Point c){

}

Mais je ne sais pas comment faire mon constructeur pour TriIso car il faudrait faire en sorte que le constructeur compare les points 2 à 2 donc a avec b, b avec c et c avec a.
Mais je ne sais pas vraiment comment faire mes test à l'interieur de cette classe.

Pour savoir si il est isocèle, il faut que je fasse un calcul de distance entre les points puis voir si il sont égaux.

Et le plus dur c'est connaitre l'angle du triangle car si il est obtus c'est un triangle de penrose 2 et si l'angle de l'isocèle est aigu c'est un triangle de penrose de type 1.

Voila si vous pouviez me dépanner pour tout çà celà serait gentil.

Si vous avez besoin d'un ou plusieurs sources dites le moi.

cordialement, ichigoZ710
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 15:49
Re,

Ok dans votre classe triangle isocele pour te faciliter la vie c'est bien d'avoir un attribut qui indique le sommet pour lequel le triangle est isocele.

_ bon deja il faut calculer ab, ac et bc
- ensuite :
if (ab==ac) { sommet='a'; }
else if (ab==bc) { sommet='b'; }
else => erreur, le triangle est pas isocele

_ Après pour les angles :
- je vois pas bien ton problème pour le moment car vous me parles de triangle de penrose de type 1 et 2 alors que vous avez  pas de triangle de penrose pour le moment mais un triangle isocèle
- donc on fera les problemes des triangles de penrose plus tard
 _ Et enfin bon pour le calcul d'angle c'est de la trigo..
- supposons que ABC soit isocèle en A. Vous projettez A à angle droit sur BC.
- Tu atteris où ? milieu de BC non ?
- bon donc BAC=2*BAM (M milieu de BC) et BAM = arc-sinus (bm/ab) = arc-sinus(bc/(2.ab))

=

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
17 oct. 2007 à 16:39
Bonjour j'aurais aimé savoir comment faire l'héritage pour penrose car on a fini notre classe triangle isocèle enfin a votre avis devons-nous faire la recherche de l'angle dans la classe TriIso ou bien dans penroseI ou penroseII (moi je pense dans TriIso)
En faite je me suis tromper pour trouper si l'angle est obtus ou aigu, il faut faire avec le nombre d'or :

nombredor = ((1+rac(5))/2)

si le triangle est aigu celà veut dire que : (un coté isocèle)/(base)=nombredor
si le  triangle est obtus celà veut dire que : (base)/(un coté isocèle)=nombredor

Donc j'aimerais savoir ou nous devons fairec e test?

je vous demanderais encore quelque chose plus  tard et après celà devrait être bon j'espere...
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 16:50
Bonjour,

LOL j'adore la phrase dernière, aprés celà va être bon j'espere :p
Ssi c'est bon après, vous mettrez ma pastille verte que l'on close le dossier penrose, et au pire tu peux revenir sous autre post, l'un empechera pas l'autre.

Sinon, pour répondre.

Calculer les angles d'un triangle, ça me parait normal que le triangle soit isocèle, de penrose ou qu'il soit normal donc idéalement le calcul des angles doit être fait le plus haut possible dans la hiérarchie.
Et là tu as pas de classe triangle
- tu as juste ta classe triangle-isocèle
Alors fais le calcul d'angle là. Mais bon c'est pas encore important vu que tu en as pas besoin apparemment
_ donc tu fais ta classe triangle-isocele, ok
_  ensuite ta classe triangle-penrose
- ça hérite de triangle-isocèledonc dans le constructeur de triangle-penrose tu fais le test qui va bien
-  tu peux aussi en profiter pour initialiser la variable type qui contiendra 1 ou 2 selon l'angle ou la longueur des cotes
Bon ainsi ça devrait aller non ?

Aah
_ faut vérifier certaines conditions aussi parce que tout triangle-isocèle est pas forcément un triangle de penrose aussi..

Ok

=

Une autruche ne se cuit pas aux petits lardons
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
17 oct. 2007 à 16:55
???
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
17 oct. 2007 à 16:59
Re,

Vous n'avez pas compris quoi donc ?

Une autruche ne se cuit pas aux petits lardons
0
Rejoignez-nous