![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
> Well, the rule seems clear: the expression for (say) Y involves every
> coordinate except Y itself. I never realised it actually matters which
> order you put them in...
Your initial algorithm would fail even the most basic test of the cross
product:
x cross y = z
y cross z = x
z cross x = y
where x = (1,0,0), y = (0,1,0), z = (0,0,1)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible a écrit :
>>> All these years, I thought the correct way to compute the cross
>>> product of two vectors is
>>>
>>> x3 = y1 z2 - z1 y2
>>> y3 = x1 z2 - z1 x2
>>> z3 = x1 y2 - y1 x2
>>>
>>> But, apparently, I was wrong. The correct way is in fact
>>>
>>> x3 = y1 z2 - z1 y2
>>> y3 = z1 x2 - x1 z2
>>> z3 = x1 y2 - y1 x2
>>>
>>
>> You should have caught that based on symmetry.
>
> Well, the rule seems clear: the expression for (say) Y involves every
> coordinate except Y itself. I never realised it actually matters which
> order you put them in...
My rule is rather a rotation (X->Y->Z->X) and yes, order matter.
You can write the first line as you want, but for the next lines, the
rotation must be applied on it strictly.
Basic check: X.Y gives Z, Y.Z gives X, Z.X gives Y, it's always a XYZ
sequence in loop. (X Y Z X Y Z...)
--
Real software engineers work from 9 to 5, because that is<br/>
the way the job is described in the formal spec. Working<br/>
late would feel like using an undocumented external procedure.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> Well, the rule seems clear: the expression for (say) Y involves every
>> coordinate except Y itself. I never realised it actually matters which
>> order you put them in...
>
> My rule is rather a rotation (X->Y->Z->X) and yes, order matter.
Yes, that does appear to be the correct method...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
On 01/17/10 12:42, Orchid XP v8 wrote:
> All these years, I thought the correct way to compute the cross product
> of two vectors is
>
> x3 = y1 z2 - z1 y2
> y3 = x1 z2 - z1 x2
> z3 = x1 y2 - y1 x2
Oh dear. Use the determinant form - easiest to remember:
http://en.wikipedia.org/wiki/Cross_product#Matrix_notation
--
I'm addicted to placebos. I'd give them up, but it wouldn't make any
difference. - Steven Wright
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Neeum Zawan wrote:
> Oh dear. Use the determinant form - easiest to remember:
>
> http://en.wikipedia.org/wiki/Cross_product#Matrix_notation
...except that then I'd have to somehow remember the correct way to do
matrix multiplication. (Something which I never get right with more than
50% probability...)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible <voi### [at] dev null> wrote:
> Neeum Zawan wrote:
> > Oh dear. Use the determinant form - easiest to remember:
> >
> > http://en.wikipedia.org/wiki/Cross_product#Matrix_notation
> ...except that then I'd have to somehow remember the correct way to do
> matrix multiplication. (Something which I never get right with more than
> 50% probability...)
Then you just end up using left-handed coordinates for your cross product
rather than right-handed. In other words, it only affects the sign of the
result.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> ...except that then I'd have to somehow remember the correct way to do
>> matrix multiplication. (Something which I never get right with more than
>> 50% probability...)
>
> Then you just end up using left-handed coordinates for your cross product
> rather than right-handed. In other words, it only affects the sign of the
> result.
Oh, does it?
With general matrix multiplication, getting it wrong tends to really
mess things up. But in the specific case of a cross product, maybe it
doesn't...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible <voi### [at] dev null> wrote:
> >> ...except that then I'd have to somehow remember the correct way to do
> >> matrix multiplication. (Something which I never get right with more than
> >> 50% probability...)
> >
> > Then you just end up using left-handed coordinates for your cross product
> > rather than right-handed. In other words, it only affects the sign of the
> > result.
> Oh, does it?
> With general matrix multiplication, getting it wrong tends to really
> mess things up. But in the specific case of a cross product, maybe it
> doesn't...
If you try to calculate A*B of two square matrices in the wrong order
(ie. A columns times B rows instead of the other way around), what you end
up doing is calculating B*A. With a cross-product it means that you are
using the opposite winding, thus reversing the resulting vector. The end
result is still correct, just pointing to the opposite direction of what
you wanted.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> With general matrix multiplication, getting it wrong tends to really
>> mess things up. But in the specific case of a cross product, maybe it
>> doesn't...
>
> If you try to calculate A*B of two square matrices in the wrong order
> (ie. A columns times B rows instead of the other way around), what you end
> up doing is calculating B*A. With a cross-product it means that you are
> using the opposite winding, thus reversing the resulting vector. The end
> result is still correct, just pointing to the opposite direction of what
> you wanted.
Well, in my case I'm merely trying to construct a system of
perpendicular vectors, so I'm not really bothered *what* they are, so
long as they're actually perpendicular. Getting the cross product
epically wrong like I did prevents this from happening...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
On 01/22/10 01:33, Invisible wrote:
> Neeum Zawan wrote:
>
>> Oh dear. Use the determinant form - easiest to remember:
>>
>> http://en.wikipedia.org/wiki/Cross_product#Matrix_notation
>
> ...except that then I'd have to somehow remember the correct way to do
> matrix multiplication. (Something which I never get right with more than
> 50% probability...)
I fail to see why you'd need to know how to do matrix multiplication.
Calculating determinants is a different procedure.
--
If you think nobody cares, try missing a couple of payments.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |