~jfpacker/pyeigen/bugfixes-0.1

« back to all changes in this revision

Viewing changes to source/vector/rowvector3f.cpp

  • Committer: Jussi Lepistö
  • Date: 2010-03-20 13:38:20 UTC
  • Revision ID: jussi.lepisto@iki.fi-20100320133820-o42x9itf2iznfsdh
Row vector * matrix multiplication

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
#include <Eigen/Array>
6
6
#include <Eigen/Geometry>
7
7
 
 
8
#include "matrix/matrix3f.h"
8
9
#include "util/macros.h"
9
10
 
10
11
 
420
421
 
421
422
PyObject* RowVector3f_multiply(PyObject* o1, PyObject* o2)
422
423
{
423
 
        RowVector3f* v;
424
 
        float scalar;
425
 
        if(RowVector3f_Check(o1) && PyNumber_Check(o2))
426
 
        {
427
 
                v = (RowVector3f*)o1;
428
 
                scalar = (float)PyFloat_AsDouble(o2);
 
424
        // Matrix multiply
 
425
        if(RowVector3f_Check(o1) && Matrix3f_Check(o2))
 
426
        {
 
427
                RowVector3f* v = (RowVector3f*)o1;
 
428
                Matrix3f* m = (Matrix3f*)o2;
 
429
 
 
430
                RowVector3f* result = PyObject_New(RowVector3f, &RowVector3fType);
 
431
                if(result != NULL)
 
432
                        result->vector = v->vector * m->matrix;
 
433
 
 
434
                return (PyObject*)result;
 
435
        }
 
436
        // Scalar multiply
 
437
        else if(RowVector3f_Check(o1) && PyNumber_Check(o2))
 
438
        {
 
439
                RowVector3f* v = (RowVector3f*)o1;
 
440
                float scalar = (float)PyFloat_AsDouble(o2);
429
441
                if(PyErr_Occurred() != NULL)
430
442
                        return NULL;
431
443
 
 
444
                RowVector3f* result = PyObject_New(RowVector3f, &RowVector3fType);
 
445
                if(result != NULL)
 
446
                        result->vector = v->vector * scalar;
 
447
 
 
448
                return (PyObject*)result;
432
449
        }
433
450
        else if(PyNumber_Check(o1) && RowVector3f_Check(o2))
434
451
        {
435
 
                scalar = (float)PyFloat_AsDouble(o1);
436
 
                v = (RowVector3f*)o2;
 
452
                float scalar = (float)PyFloat_AsDouble(o1);
 
453
                RowVector3f* v = (RowVector3f*)o2;
437
454
                if(PyErr_Occurred() != NULL)
438
455
                        return NULL;
 
456
 
 
457
                RowVector3f* result = PyObject_New(RowVector3f, &RowVector3fType);
 
458
                if(result != NULL)
 
459
                        result->vector = v->vector * scalar;
 
460
 
 
461
                return (PyObject*)result;
439
462
        }
440
 
        else
441
 
                RETURN_NOTIMPLEMENTED;
442
 
 
443
 
        RowVector3f* result = PyObject_New(RowVector3f, &RowVector3fType);
444
 
        if(result != NULL)
445
 
                result->vector = v->vector * scalar;
446
 
 
447
 
        return (PyObject*)result;
 
463
 
 
464
        RETURN_NOTIMPLEMENTED;
448
465
}
449
466
 
450
467
PyObject* RowVector3f_divide(PyObject* o1, PyObject* o2)
504
521
PyObject* RowVector3f_inplace_multiply(PyObject* o1, PyObject* o2)
505
522
{
506
523
        RowVector3f* v;
507
 
        float scalar;
508
 
        if(RowVector3f_Check(o1) && PyNumber_Check(o2))
509
 
        {
510
 
                v = (RowVector3f*)o1;
511
 
                scalar = (float)PyFloat_AsDouble(o2);
 
524
 
 
525
        // Matrix multiply
 
526
        if(RowVector3f_Check(o1) && Matrix3f_Check(o2))
 
527
        {
 
528
                v = (RowVector3f*)o1;
 
529
                Matrix3f* m = (Matrix3f*)o2;
 
530
 
 
531
                v->vector *= m->matrix;
 
532
        }
 
533
        // Scalar multiply
 
534
        else if(RowVector3f_Check(o1) && PyNumber_Check(o2))
 
535
        {
 
536
                v = (RowVector3f*)o1;
 
537
                float scalar = (float)PyFloat_AsDouble(o2);
512
538
                if(PyErr_Occurred() != NULL)
513
539
                        return NULL;
 
540
 
 
541
                v->vector *= scalar;
514
542
        }
515
543
        else if(PyNumber_Check(o1) && RowVector3f_Check(o2))
516
544
        {
517
 
                scalar = (float)PyFloat_AsDouble(o1);
 
545
                float scalar = (float)PyFloat_AsDouble(o1);
518
546
                v = (RowVector3f*)o2;
519
547
                if(PyErr_Occurred() != NULL)
520
548
                        return NULL;
 
549
 
 
550
                v->vector *= scalar;
521
551
        }
522
552
        else
523
553
                RETURN_NOTIMPLEMENTED;
524
554
 
525
 
        v->vector *= scalar;
526
 
 
527
555
        return (PyObject*)v;
528
556
}
529
557