Tilldela det värde som en pekare pekar till på enklast möjli|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Tilldela det värde som en pekare pekar till på enklast möjli
Tjoppen
Kommer du hit ofta?
Medlem
Forum Posts: 872
Member Since:
August 29, 2001
sp_UserOfflineSmall Offline
1
November 14, 2001 - 7:11 pm
sp_Permalink sp_Print

Tilldela det värde som en pekare pekar till på enklast möjliga sätt...

VECTOR Normalize( void ){return this[0]/this->Magnitude();}

då tänkte jag mest:

return this[0]/this->Magnitude();

har provat

return (VECTOR)this/this->Magnitude();

vilket inte funkade....

Jaha...Då var man vid slutet...Vad ska man skriva här da? Inget. Som vanligt.

Tjoppen
Kommer du hit ofta?
Medlem
Forum Posts: 872
Member Since:
August 29, 2001
sp_UserOfflineSmall Offline
104270
November 16, 2001 - 2:27 pm
sp_Permalink sp_Print

öh! hallå?

_paul_
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 126
Member Since:
August 2, 2001
sp_UserOfflineSmall Offline
104331
November 16, 2001 - 4:58 pm
sp_Permalink sp_Print

har lite svårt att följa din kod wink

men om man vill returnera värdet av det som en pekar pekar på så får man avrefera pekaren.

int value() {
int a=10;
int *b;
b=&a;
return *b;}

Skulle returnera värdet 10
Men att avrefera en this pekare känns tämligen meningslöst, eftersom om man gjort ett anrop till objektet så måste man ju redan ha någon referens till objektet ifråga.

[ Detta Inlägg ändrades av: _paul_ den 2001-11-16 17:59 ]

Tjoppen
Kommer du hit ofta?
Medlem
Forum Posts: 872
Member Since:
August 29, 2001
sp_UserOfflineSmall Offline
105414
November 18, 2001 - 6:14 pm
sp_Permalink sp_Print

Hmmm...

return *this / this->Magnitude();

lr?
(Kan inte kolla...Min 1200 @ reparation)

_paul_
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 126
Member Since:
August 2, 2001
sp_UserOfflineSmall Offline
105432
November 18, 2001 - 6:44 pm
sp_Permalink sp_Print

On 2001-11-18 19:14, Tjoppen wrote:
Hmmm...

return *this / this->Magnitude();

lr?
(Kan inte kolla...Min 1200 @ reparation)

om this / this->Magnitude() resulterar i en minnes address vars värde du vill returnera så gör du *(this / this->Magnitude()) eftersom * har hög prioritet.

Jag tycker dock att division med this pekaren inte borde ge något vettigt värde. Utan jag antar att det du vill göra är att returnera värdet på det som this->Magnitude() anropet returnerar.
i så fall
*(this->Magnitude()) eller om en cast behövs
*((VECTOR*)(this->Magnitude()))

EDIT: Tänkte efter lite, du har nog gjort en operatoröverlagring av / som resulterar i en pekare vars värde ska returneras så du kan glömma den andra delen av detta inlägg.

[ Detta Inlägg ändrades av: _paul_ den 2001-11-18 20:58 ]

Tjoppen
Kommer du hit ofta?
Medlem
Forum Posts: 872
Member Since:
August 29, 2001
sp_UserOfflineSmall Offline
105638
November 19, 2001 - 6:14 am
sp_Permalink sp_Print

Nu måste jag förklara lite:
class VECTOR
{

VECTOR Normalize( void )
^^ INTE en pekare
{
return *this
^^ this är, som bekant, VECTOR...exempel följer...
/
^^ VECTOR oprator / ( float a )
this->Magnitude();
^^ float VECTOR::Magnitude()
}
}

VECTOR a = Vector( 0, 0, 4 );
a.Normalize();

a == Vector( 0, 0, 1 );

jazdc
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 29
Member Since:
November 20, 2001
sp_UserOfflineSmall Offline
107124
November 21, 2001 - 11:09 am
sp_Permalink sp_Print

Rimligtvis lagrar du vektorns koordinater i någon eller några privata medlemsvariabler, t.ex. x, y och z eller coords[].

En normalize()-funktion bör rimligtvis se ut ungefär så här (om vi kör med arrayvarianten):

void normalize()
{
for (int i = 0; i < sizeof(coords)/sizeof(double); i++)
coords[i] /= magnitude();
}

Där magnitude() returnerar vektorns norm (magnitud). Obs att sizeof(double) ska ersättas av annat lämpligt uttryck om dina koordinater inte är doubles.

Om du istället vill returnera en ny Vector (snarare än att modifiera den du gör anropet på) kan funktionen istället se ut så här:

Vector normalize() {
return (*this) / magnitude();
}

Förmodligen är det det senare du ursprungligen försökte åstadkomma.

Lycka till!

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 403
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL