begin process at 2010 02 10 04:30:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

jeudi 10 janvier 2008 à 14:08:39 | j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

Salut à tous,
svp, je dois tracez un cercle à l'aide d'une matrix de rotation (dimension 2)
et j'utilise la matrix suivante avec Coordonnés Homogene:
(x')    (x)   (cos(a)  -sin(a)  xm * (1 - cos(a)) + ym * sin(a))
(y') = (y) * (sin(a)   cos(a)  ym * (1 - cos(a)) - xm * sin(a))
 (1 )   (1)   (  0                      0                      1             )

et j'obtiens cet Algoritme :

#include "Drehmatrix.h"

extern FrameGrabber *fg;
extern BYTE *puffer1;  // Originalbild
extern BYTE *puffer2;  // ziel Bil

// Bildmitte ermitteln MAX_ZEILE ist 576 und MAX_SPALTE ist 768
const int Xm = MAX_SPALTE / 2;
const int Ym = MAX_ZEILE / 2;

void Drehmatrix(HDC hdc,COLORREF farbe)
{
 double x_Neu, y_Neu;
 double phi;
 
 int pixel;
 
 double radius = 100.5;
 
 int x_puffer1, y_puffer1;
 
 int x, y, i;
 
 //Umrechnung von Grad nach Bogenmass
 //phi = PI * phi_in_deg / 180;

 pixel=(int)(2.0*(double)radius*PI);
 
 
 for (y = 0; y < MAX_ZEILE; y++)
 {
  for (x = 0; x < MAX_SPALTE; x++)
  {
     i = y * MAX_SPALTE + x;

            phi =(double)i/pixel*2*PI;
    
   // Koordinaten aus dem originalen Bild ermitteln
  
   x_Neu =(double) Xm + cos(phi) * (double)(x - Xm) - sin(phi) *(double) (y - Ym);
   
   
   y_Neu = (double)Ym + sin(phi) * (double)(x - Xm) + cos(phi) * (double)(y - Ym);
     

   // originalen Bild neu Koordinaten
   x_puffer1 =  (int) (x_Neu);
   y_puffer1 = (int) (y_Neu);

   SetPixel (hdc, x_puffer1, y_puffer1 ,farbe);

   
  }
 }

}

 

LRESULT CALLBACK DialogProc_Drehmatrix(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

 //COLORREF farbe = RGB(255,0,0);
 COLORREF farbe;
  
 switch (message)

 {

  case WM_PAINT:

    HDC      hdc;
    PAINTSTRUCT   ps;
          farbe = 0x0000FF;
    hdc = BeginPaint(hwnd, &ps);   //ganze Bild
       fg->ZeichneFrame(2,hwnd);//
     Drehmatrix(hdc, farbe);

    EndPaint(hwnd, &ps);

    return 0;

    break;

 

  default:       // Nachrichten weiterleiten

    return DefWindowProc(hwnd, message, wParam, lParam);

 

   }

   return 0;

}

mon Problem est que au lieu d'obtenir un cercle j'ai plusieurs cercles.
SVP aidez moi
je voudrais bien obtenir un Cercle

jeudi 10 janvier 2008 à 14:48:26 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

Pistol_Pete

Salut

Plusieurs choses:
Ta facon d'ecrire la multiplication de tes matrices est incorrecte:
ce n'est pas
(x')    (x)   (cos(a)  -sin(a)  xm * (1 - cos(a)) + ym * sin(a))
(y') = (y) * (sin(a)   cos(a)  ym * (1 - cos(a)) - xm * sin(a))
 (1 )   (1)   (  0                      0                      1             )

qu'il faut ecrire mais:

(x')      (cos(a)  -sin(a)  xm * (1 - cos(a)) + ym * sin(a))    (x)
(y') =   (sin(a)   cos(a)  ym * (1 - cos(a)) - xm * sin(a))   *(y)
 (1 )     (  0                      0                      1                )      (1)

Je sais l'erreur ne vient pas de la mais c'est bon a corriger.

Sinon je ne comprend pas pourquoi tu utilises cette matrice a coordonnes homogenes:
Je ne connais pas cette methode. A ta place, j'utiliserai plutot cette matrice de rotation pour tracer un cercle:

(x')    (cos (a)       sin (a)      )    (x)
(y')=  (-sin (a)         cos(a)   )  *(y)


A+
Mon site internet : [ Lien ]

jeudi 10 janvier 2008 à 14:50:29 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

acx01b

salut, quel est l'intéret d'utiliser une matrice de rotation pour dessiner un cercle ???
c'est pas plus logique d'utiliser bresenham ?
[ Lien ]
jeudi 10 janvier 2008 à 15:16:47 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

Pistol_Pete

Surment parce que ca doit etre un exercice scolaire.

Autrement cette ligne suffit:
Ellipse(hdc, 300, 20, 400, 120);      //dessin d'une ellipse avec l'api windows.

Au fait c'est quoi l'avantage de bresenham ? C'est que l'on peut tracer 4 points en seul iteration. =>donc 4 fois plus rapide?

A+
Mon site internet : [ Lien ]

jeudi 10 janvier 2008 à 15:20:26 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

je fais avec la matrix rotation car c'est l'?enonc?e de l'exercise donn?e par le prof
Merci
jeudi 10 janvier 2008 à 15:22:25 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

oui mais le prof ne sera pas content car il aimerait bien avoir un cercle a partie d'une Matrixe rotation

stp ta matrix est beaucoup plus interresante:
(x')    (cos (a)       sin (a)      )    (x)
(y')=  (-sin (a)         cos(a)   )  *(y)
 
peux tu m'envoyer le code en c++?
jeudi 10 janvier 2008 à 15:26:26 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

j'ai visitee ton cite c'est interessant, car tu fais exactement ce qu'on appelle ici en allemagne Digitalebildverarbeitung.
et j'ai un exercie `a faire avec le hough
jeudi 10 janvier 2008 à 15:30:45 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

tu sais je dois considerer le milieu(xm,ym)=(385.5, 285.5) dans ma matrix c'est pour cela que je pensais que la matrix homogene serai la meilleur

excusez moi pour les fautes mais je parle normalement allemand
jeudi 10 janvier 2008 à 15:40:50 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

Pistol_Pete

C'est pas grave pour les fautes, tu parles deja bien francais.
Pour le code reprend ce que tu as deja ecrit en remplacant:

x-neu et y-neu
par:

x_neu =(   (double)  x*cos(a)+ (double)y*sin(a))  *  Rayon + 385.5;
y_neu =(   (double)  -x*sin(a)+ (double)y*cos(a)) * Rayon  + 285.5;

avec x et y appartenant au cercle unite : (-1,1)

A+
Mon site internet : [ Lien ]

jeudi 10 janvier 2008 à 16:13:35 | Re : j'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

laura1978

j'ai fais coe tu m'as dit mais, il fait des points sans forrmer un cercle
c.a.d les points apparaissent sur l'image mais ne forme pas de cercle

1 2 3 4 5

Cette discussion est classée dans : int, hdc, double, phi, puffer1


Répondre à ce message

Sujets en rapport avec ce message

Aide [ par eikonos ] Je travail sur une dll appellé psfg.dllj'ai ces lignes suivant de codetypedef struct CAMERAPARAM_tag{int nGain;int nOffset;int bOffsetFix;int nUpperLi need help_API - debutant. [ par JimyRyan ] j'ai cree un progamme qui affiche une image (stoquee dans un fichier .bmp), et une phrase (lu a partir d'un fichier TXT), j'ai deux problemes : une fo cosinus [ par anek971 ] Bonjour ,ben avt de demander de l'aide j'ai chercher sur le forum mais ya pas le programme en c.Et en faite c juste pr une verification car mon progra tableau a double entrée alloué dynamiquement [ par amortlintelligence ] Voila j'aurais voulu utiliser un tableau (tableau de tableau) dans une fonction. Je pense qu'il faut donc que je le crée dynamiquement avec un code du aide sur un algorithme en dec-C++ [ par viagra ] je souhaiterais être aidé sur un algorithme sur lequel j'éprouve des problemes. en effet lorsque je compile aussi bien au niveau de dev-c++ et MSYS, l Segmentation Fault....en traitement d'image [ par psysta ] Bonjour,je suis nouveau dans la programmation en C. J'ai un programme Matlab qui marche bien, et je souhaiterais l'implémenter en C. Le pgm compile bi Manipulation de Bitmap [ par rogo ] J'ai réaliser une boite de dialogue sur laquelle j'ai inséré deux Pictures de taille différentes :IDC = IDC_Image_1 et IDC_Image_2Type = BitmapStyle = C++ de merde...enfin je veux dire... [ par brindillee ] Salut,J'ai un petit soucis qui me cause des grands soucis...Voila j'ai choppé une fonction de décomposition (svd...) en C++ sur le net mais je n'arriv probleme reallocation memoire vecteur [ par savoyard ] double *b;//fction allocation memoire: (permet d'allouer pas obligatoirement à partir de b[0] mais d ou on veut:double *dvector(int nl,int nh){double Lecture d'un fichier quelconque [ par jb60 ] Bonjour,J'aimerais savoir si il est possible de lire les données d'un fichier quelconque lorsqu'on ne connait pas le format du fichier d'origine... Je


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales