Started by Feb 23 2000 07:10 AM

,
6 replies to this topic

Posted 23 February 2000 - 07:10 AM

I am trying to write basic operation of 3d vectors represented by arrays.
float pointa[3]={2.0f, 1.5f, 3.0f};
float pointb[3]={2.4f, 2.9f, -0.5f };
float pointc[3];
Given pointa and pointb, I want to make pointc to be the sum of pinta and pointb by using a function with pointers or reference (not by return value). What I want is like:
void Add(float pointp[3], float pointq[3], float* out)
{
out[0] = pointp[0] + pointq[0];
out[1] = pointp[1] + pointq[1];
out[2] = pointp[2] + pointq[2];
}
But even if I write
Add(pointa, pointb, pointc);
it seems pointc does not become the desired sum;
What's wrong with this? If I write
void AddVersion2(float pointp[3], float pointq[3], float & out0, float & out1, float & out2)
{
out0 = pointp[0] + pointq[0];
out1 = pointp[1] + pointq[1];
out2 = pointp[2] + pointq[2];
}
then
AddVersion2(pointa, pointb, pointc[0], pointc[1], pointc[2])
should work, but I want to avoid the long parameters.
But how can I write simpler function using array?
If I use a struct for definition of a 3d-vector (x, y, z components) and if I write a simple function like Add(pointa, pointb, pointc) by reference, then it works.
Should I avoid array representation of 3-d points?
James
Edited by - jamesh on 2/23/00 1:19:58 PM

Posted 23 February 2000 - 07:24 AM

Really? I will try again. There might be something wrong with my codes other than Add.

Thanks for quick reply.

Thanks for quick reply.

Posted 23 February 2000 - 09:03 AM

the code looks fine to me.

try it with

void Add(float* pointp, float* pointq, float* out)

just for kicks

try it with

void Add(float* pointp, float* pointq, float* out)

just for kicks

Posted 25 February 2000 - 05:38 AM

Sorry for my first post. Now I recognised my problem. My problem is how I can modify multi-dimensional array by passing it into function. Please let me restate the problem:

Float VectArrayA[100][3]; //array of vectors

Float VectArrayB[100][3]; //array of vectors

Float VectArrayC[100][3]; //array of vectors

Suppose VectArrayA and VectArrayB are already assigned values. Then I want to assign values for VectArrayC as sum of VectArrayA and VectArrayB, i.e.,

I want to write a code for a function so that, for each k and j,

VectArrayC[k][j] = VectArrayA[k][j]+ VectArrayB[k][j]

by passing VectArrayC in to the function (not a return value of the function). I am very confused about this problem.

James

Edited by - jamesH on 2/25/00 11:47:53 AM

Float VectArrayA[100][3]; //array of vectors

Float VectArrayB[100][3]; //array of vectors

Float VectArrayC[100][3]; //array of vectors

Suppose VectArrayA and VectArrayB are already assigned values. Then I want to assign values for VectArrayC as sum of VectArrayA and VectArrayB, i.e.,

I want to write a code for a function so that, for each k and j,

VectArrayC[k][j] = VectArrayA[k][j]+ VectArrayB[k][j]

by passing VectArrayC in to the function (not a return value of the function). I am very confused about this problem.

James

Edited by - jamesH on 2/25/00 11:47:53 AM

Posted 25 February 2000 - 05:59 AM

Write it like this

Of course this requires that each element in the array is three floats long.

void Add(float *out, float *vecA, float *vecB, int length)

{

for( int n = 0; n < length*3; n++ )

{

out[n] = vecA[n] + vecB[n];

}

}

Of course this requires that each element in the array is three floats long.

Posted 27 February 2000 - 04:02 AM

Thank you. That is the way to go.

James

Edited by - JamesH on 2/27/00 10:05:32 AM

James

Edited by - JamesH on 2/27/00 10:05:32 AM