Avatar billede narrr Nybegynder
31. marts 2004 - 12:32 Der er 15 kommentarer

vector og Polygon

Jeg har en vector<CPoint>, som indeholder nogle punkter jeg vil tegne en polygon udfra. ::Polygon-funktionen i WINAPI tager et LPPOINT som argument, men hvordan kan jeg bruge vektoren som argument i denne funktion? Jeg har prøvet nogle forskellige ting med iterators, men det virker ikke rigtig :(.. Min løsning lige nu er at kopiere vektoren over i et almindeligt array, men det synes jeg ikke er en særlig god løsning.
Avatar billede jpk Nybegynder
31. marts 2004 - 12:42 #1
Er det MFC's CPoint du bruger?
Avatar billede narrr Nybegynder
31. marts 2004 - 12:48 #2
Jep
Avatar billede jpk Nybegynder
31. marts 2004 - 12:52 #3
Af ren nysgerrighed:
Hvorfor bruger du MFC's CPoint-klasse, men ikke MFC's Polygon-metode?
Avatar billede narrr Nybegynder
31. marts 2004 - 12:53 #4
Ja okay, det gør jeg egentlig også. Ved ikke hvorfor jeg skrev WINAPI, det var en fejl!
Avatar billede narrr Nybegynder
31. marts 2004 - 13:06 #5
Hmm.. Det ser ud til at man bare kan bruge
vector<type> v;
Polygon(&v[0], ...);

Så er mit problem bare, at den vector jeg bruger hedder vector<pair<CPoint, CPoint> > v;

Når jeg prøver med Polygon(&v[0].first, ...); får jeg ikke det rigtige resultat.
Avatar billede jpk Nybegynder
31. marts 2004 - 13:13 #6
Nej, det kan ikke umiddelbart lade sig gøre sådan, men hvad er grunden til at du har dem som pairs? De vil jo alle blive forbundet med Polygon...
Avatar billede narrr Nybegynder
31. marts 2004 - 13:15 #7
Det første CPoint indeholder punktets retning(den vej det flyver), og det andet CPoint indeholder punktets position.
Avatar billede narrr Nybegynder
31. marts 2004 - 13:17 #8
(faktisk er det omvendt, men det er vel lige meget)
Avatar billede jpk Nybegynder
31. marts 2004 - 13:20 #9
Et punkt kan per definition ikke indeholde en retning, dertil bruges en vektor (altså matematisk vektor, ikke en collection)

Hvis du vil have dine CPoint's organiseret som pairs, kan det ikke umiddelbart lade sig gøre at give vektoren som input til Polygon-metoden...
Avatar billede narrr Nybegynder
31. marts 2004 - 17:03 #10
Man kan da godt bruge en CPoint til at angive retning med, en vektors retning angives jo også bare med to tal.
Avatar billede jpk Nybegynder
31. marts 2004 - 22:24 #11
Som jeg skrev, "per definition"...
Et punkt angiver netop dét, et punkt! Hverken en retning, en hastighed eller lign.
En vektor kan derimod bruges til det formål.
De 2x4 bytes du opbevarer et CPoint's værdier i, kan jo egentlig bruges til mange ting, men hvorfor bruger du så ikke bare 2 int's direkte?
Fordi det giver mening at have en klasse til at repræsentere en given instans i den "objektorienterede" verden, ikke..?

Min pointe er:
Typen alene eller hvor meget en klasses member's fylder i memory, bør ikke have direkte indflydelse på, hvad den bruges til at repræsentere.

I øvrigt angives en vektor kun med to tal i to dimensioner.

CPoint's members bærer også præg af, at det netop er et punkt i skærmopløsning, altså heltal! Det egner sig ikke nødvendigvis til at angive retning/hastighed, hvor man ofte har bruge for decimaltal...
Avatar billede narrr Nybegynder
01. april 2004 - 16:51 #12
Nå, men hvis jeg så skal være mere korrekt vil jeg da straks omdøbe CPoint klassen til CVector2 og ændre x og y til doubles.

Eller måske brugte jeg CPoint fordi den allerede har alle de operationer jeg skal bruge i MIN vector.
Avatar billede narrr Nybegynder
01. april 2004 - 16:52 #13
Jeg kan da godt se at navnet CPoint ikke er så sigende, men så kan man da læse mine kommentarer.
Avatar billede jpk Nybegynder
01. april 2004 - 17:32 #14
Hehe, selvfølgelig må du da selv om hvordan du vil gøre, men jeg mener nu stadig at det er ret besværligt at bruge heltal i en retningsvektor...
Avatar billede narrr Nybegynder
01. april 2004 - 19:06 #15
Det vil jeg give dig ret i.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester