-
15/05/2012 - 21h03 iken93
programme en C
bonsoir,Je vous prie de bien vouloir m'aider.
J'ai une fonction appelé "calcul" et je voudrais utiliser le résultat du calcul dans une autre fonction appelé "angle". Comment faire pour l'appeler?
Merci pour votre attention et votre aide. Code: #include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
double x,y;
double r,theta;
} point;
void calcul(point *pv,point const *po)
{
pv->r=sqrt((po->x*po->x)+(po->y*po->y));
}
double angle(point const *pv,point const *po)
{
double ang=calcul(&v,&o);
ang=2*atan2((po->y),((po->x)+ang));
return ang;
}
void saisir(point *pv)
{
printf("saisir x: ");
scanf("%lf",&pv->x);
printf("saisir y: ");
scanf("%lf",&pv->y);
}
int main()
{
point o,v;
double ang;
saisir(&o);
printf("x=%lf\ny=%lf\n",o.x,o.y);
calcul(&v,&o);
printf("r=%lf\n",v.r);
ang=angle(&o,&v);
printf("theta=%lf",ang);
}
Dernière modification par Jack ; 15/05/2012 à 21h55.
Motif: Balises code, comme d'hab'
-
15/05/2012 - 21h56 Jack
Re : programme en C
Les règles participative de ce forum sont faites pour être lues !!! Règles participatives pour ce nouveau forum -
15/05/2012 - 22h00 Jack
Re : programme en C
J'ai une fonction appelé "calcul" et je voudrais utiliser le résultat du calcul dans une autre fonction appelé "angle". Comment faire pour l'appeler?
Si la fonction doit renvoyer un double, il suffit de modifier son entête ainsi: Code: void calcul(point *pv,point const *po) et de faire return laValeurAretourner;
dans la fonction.
J'avoue avoir du mal à comprendre comment tu peux manipuler des pointeurs et ne pas connaitre la réponse à un problème aussi trivial ...
A+
Dernière modification par Jack ; 15/05/2012 à 22h01.
-
15/05/2012 - 22h27 iken93
Re : programme en C
comment utiliser le resultat de cette fonction pour faire un calcul avec dans une autre fonction ?
void calcul(point *pv,point const *po)
{
pv->r=sqrt((po->x*po->x)+(po->y*po->y));
}
-
15/05/2012 - 22h53 Jack
Re : programme en C
Désolé, erreur dans mon message précédent. je voulais écrire: Code: doublecalcul(point *pv,point const *po) Quelle valeur veux-tu renvoyer? pv->r ?
A+
Dernière modification par Jack ; 15/05/2012 à 22h55.
-
16/05/2012 - 12h49 Dlzlogic
Re : programme en C
 Envoyé par Jack Désolé, erreur dans mon message précédent. je voulais écrire: Code: doublecalcul(point *pv,point const *po) Quelle valeur veux-tu renvoyer? pv->r ?
A+ Petite supposition, le code et la question constituent l'exercice.
Si Iken ne sait pas ce qu'est un pointeur, il ne sait pas ce qui se passe dans la fonction calcul(), ni ce qu'on pourrait renvoyer
Autre solution possible : un #define mais qu'il ne faudrait surtout pas appeler "calcul".
La fonction angle() est assez bizarre, comme le reste d'ailleurs.
J'ai un peu de mal à comprendre comment une structure point peut contenir une variable r et une variable theta (longueur et angle selon toute probabilité).
[HS] Il semble qu'on ait retiré les attributs "origine" et "extrémité" aux vecteurs, aurait-on rajoutés aux points une direction et et un longueur pour tenter de rétablir un équilibre ? [/HS] -
16/05/2012 - 13h48 Jack
Re : programme en C
J'ai un peu de mal à comprendre comment une structure point peut contenir une variable r et une variable theta (longueur et angle selon toute probabilité).
Qu'y a-t-il de bizarre? Les coordonnées cartésiennes sont plus faciles à manipuler pour des translations. En revanche, pour des rotations, les coordonnées polaires sont plus pratiques.
A+
-
16/05/2012 - 14h37 Dlzlogic
Re : programme en C
Bonjour Jack,
Il est certain qu'il y a une évolution des termes que j'ai un peu de mal à comprendre.
Pour moi, un point c'est une position ponctuelle.
Si on est dans un repère cartésien, c'est un X,Y, pas de problème. Ce repère a une origine etc.
Si on est dans un repère non cartésien, repère central avec une référence, il faut le définir.
Si c'est le même centre et la même référence de direction, pas la peine d'avoir 2 repères.
Dans le cas d'une rotation. L'objet que l'on va transformer peut être ramené à un triangle. Sauf si le centre de rotation est justement l'origine du repère, ce qui est vraiment improbable, ces deux coordonnées centrales ne présentent pas vraiment d'intérêt.
En fait, je me place dans le cas d'un programme de géométrie réelle : ces deux coordonnées centrales me paraissent vraiment sans intérêt. Code: double angle(point const *pv,point const *po)
{
double ang=calcul(&v,&o);
ang=2*atan2((po->y),((po->x)+ang));
return ang;
} La valeur renvoyée par calcul() est probablement une distance. Cette distance est ajoutée à la coordonnée X. J'ai un peu de mal à imaginer que la fonction atan2 retourne la valeur de l'angle espérée.
La valeur renvoyée par la fonction sera très arrondie.
Mais dans tous les cas, le problème important (concernant ce message) est l'utilité de mémoriser la direction et la distance à l'origine dans la structure point, que j'ai vraiment du mal à comprendre.
Pour information, après avoir beaucoup réfléchi, ma classe TPoint{} contient un pointeur sur un matricule, X et Y en long (et non double) et Z en float, et c'est tout, sauf naturellement un grand nombre de constructeurs. Mais il est vrai, je travaille en C++.
-
16/05/2012 - 15h00 Jack
Re : programme en C
Mais dans tous les cas, le problème important (concernant ce message) est l'utilité de mémoriser la direction et la distance à l'origine dans la structure point, que j'ai vraiment du mal à comprendre.
Comme je l'ai dit plus haut, il s'agit de la représentation polaire d'un point, qui permet de le localiser par son module et son argument. Certaines équations travaillent en polaire, donc la représentation graphique en sera facilitée.
La valeur renvoyée par calcul() est probablement une distance.
Oui, il s'agit visiblement de la distance à l'origine (en supposant que po représente le point d'origine) , permettant de calculer le module. On notera au passage que les paramètres utilisés pour appeler la fonction calcul sont faux (double ang=calcul(&v,&o); ). Il devait s'agir de pv et po sûrement.
Pour information, après avoir beaucoup réfléchi, ma classe TPoint{} contient un pointeur sur un matricule, X et Y en long (et non double)
Si tu travailles sur des points d'un écran, les coordonnées sont discrètes et peuvent donc être représentées par des entiers. Si tu travailles sur la trajectoire d'un mobile, des réels seront plus adaptés.
Il serait très éclairant de savoir quel est le but de cette application en tout cs.
A+
Dernière modification par Jack ; 16/05/2012 à 15h01.
-
16/05/2012 - 16h03 Dlzlogic
Re : programme en C
Mon programme traite de conception et calcul dans le domaine de la topographie, VRD, SIG etc.
Un avantage d'utiliser des long au lieu des flottants, c'est que je gagne 2 chiffres significatifs.
J'ai une unité de base, généralement le mm et donc, en mémoire à tout moment les coordonnées sont en UB.
Naturellement tous les calculs sont faits en double, mais le stockage est en long. Pour le Z, ça ne présente pas grand intérêt, donc c'est du float.
Concernant l'origine du système, c'est une notion très subjective. L'origine des coordonnées est très éloigné des points traités. L'origine de travail est calculée automatiquement suivant une formule inconnue par l'utilisateur, l'origine de l'écran est naturellement en haut à gauche avec les Y croissant vers le bas etc. sans compter les rotations, homothéties et affinités éventuelles.
Ceci explique que un système de coordonnes centrale n'a pas vraiment de sens en informatique graphique, dans un contexte géographique.
Mais naturellement, je suis prêt à donner toutes les explications qui pourraient être nécessaires.
-
16/05/2012 - 17h54 Jack
Re : programme en C
On attend donc avec impatience le fameux contexte de iken93.
A+
| | |