digitalmars.D.learn - setting statically sized multi-dimensional arrays
- Spacen Jasset <spacenjasset yahoo.co.uk> Jan 21 2008
- Ary Borenszweig <ary esperanto.org.ar> Jan 21 2008
- Spacen Jasset <spacenjassset yahoo.co.uk> Jan 22 2008
- Hoenir <mrmocool gmx.de> Jan 22 2008
- Hoenir <mrmocool gmx.de> Jan 22 2008
- Bill Baxter <dnewsgroup billbaxter.com> Jan 22 2008
- Hoenir <mrmocool gmx.de> Jan 22 2008
- Bill Baxter <dnewsgroup billbaxter.com> Jan 22 2008
- Hoenir <mrmocool gmx.de> Jan 22 2008
I have function below where I try to set a float[4][4] using array
syntax. This doesn't work. Am I doing it wrongly, or is this not
supported in dmd version 1? I seem to remember seeing something about
this but can't remember where.
void MakeRotationAboutX(float[4][4] m, float angle)
{
m[] = [[1f, 0, 0, 0],
[0, cos(angle * PI / 180), sin(angle * PI / 180), 0],
[0, -sin(angle * PI / 180), cos(angle * PI / 180), 0],
[0, 0, 0, 1]];
}
main.d:501: Error: cannot implicitly convert expression
..lots of stuff..
of type float[][4u] to float[4u]
Command /usr/bin/rebuild returned with code 256, aborting.
Jan 21 2008
Spacen Jasset escribió:I have function below where I try to set a float[4][4] using array syntax. This doesn't work. Am I doing it wrongly, or is this not supported in dmd version 1? I seem to remember seeing something about this but can't remember where. void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0, 0, 0, 1]]; } main.d:501: Error: cannot implicitly convert expression ..lots of stuff.. of type float[][4u] to float[4u] Command /usr/bin/rebuild returned with code 256, aborting.
Try putting the "f" suffix on the first zeros in the second, third and foruth rows, too. It works for me: import std.math; void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0f, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0f, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0f, 0, 0, 1]]; }
Jan 21 2008
Ary Borenszweig wrote:Spacen Jasset escribió:I have function below where I try to set a float[4][4] using array syntax. This doesn't work. Am I doing it wrongly, or is this not supported in dmd version 1? I seem to remember seeing something about this but can't remember where. void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0, 0, 0, 1]]; } main.d:501: Error: cannot implicitly convert expression ..lots of stuff.. of type float[][4u] to float[4u] Command /usr/bin/rebuild returned with code 256, aborting.
Try putting the "f" suffix on the first zeros in the second, third and foruth rows, too. It works for me: import std.math; void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0f, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0f, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0f, 0, 0, 1]]; }
It still fails with the same error, I did try adding the 'f' suffix, and it's probably needed, but that didn't fix it. I have: On windows: Digital Mars D Compiler v1.015 Copyright (c) 1999-2007 by Digital Mars written by Walter Bright And on linux: gdc (GCC) 4.1.3 20070831 (prerelease gdc 0.25, using dmd 1.021) (Ubuntu 0.25-4.1.2-16ubuntu1) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Jan 22 2008
Spacen Jasset schrieb:void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0, 0, 0, 1]]; }
will get inlined by the compiler so there's no efficiency loss. btw you rotate clockwise, is this intented?
Jan 22 2008
Oh and yet another thing: angle is in degrees, why is it a float?
Jan 22 2008
Hoenir wrote:Oh and yet another thing: angle is in degrees, why is it a float?
Maybe he wants better than 1:360 precision? --bb
Jan 22 2008
Bill Baxter schrieb:Maybe he wants better than 1:360 precision?
Jan 22 2008
Hoenir wrote:Spacen Jasset schrieb:void MakeRotationAboutX(float[4][4] m, float angle) { m[] = [[1f, 0, 0, 0], [0, cos(angle * PI / 180), sin(angle * PI / 180), 0], [0, -sin(angle * PI / 180), cos(angle * PI / 180), 0], [0, 0, 0, 1]]; }
will get inlined by the compiler so there's no efficiency loss. btw you rotate clockwise, is this intented?
Unless he's using row vectors and v' = v * R Or storing the matrix in column major format for use with Fortran and/or OpenGL (most likely). --bb
Jan 22 2008
Bill Baxter schrieb:Unless he's using row vectors and v' = v * R Or storing the matrix in column major format for use with Fortran and/or OpenGL (most likely).
Jan 22 2008









Spacen Jasset <spacenjassset yahoo.co.uk> 