-
-
Save zmughal/2f15c631cc52a98ecdf0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use strict; | |
use warnings; | |
use 5.010; | |
use PDL; # must be called before (!) 'use Inline Pdlpp' calls | |
use IO::All -binary; | |
use Inline 'Pdlpp' => io( "pdlpp.pm" )->all; | |
use Benchmark 'timethis'; | |
my $v = transpose pdl q( [ 1, 0, 0; 1 0 0 ] ); | |
$v->rotate( 180, transpose pdl( 0, 1, 0 ) ); | |
say $v; | |
my $vec = pdl( 1, 0, 0 ); | |
my $axis = pdl( 0, 1, 0 ); | |
timethis( 40000, sub { $vec->rotate( 180, $axis ) } ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use strict; | |
pp_def( | |
'rotate', | |
Pars => 'vec(n); angle(); axis(n)', | |
Code => q{ | |
double PI = 3.141592653589793; | |
double SinHalfAngle = sin( $angle() / 2.0 / 180.0 * PI ); | |
double CosHalfAngle = cos( $angle() / 2.0 / 180.0 * PI ); | |
// rotation quaternion | |
double Rx = $axis(n=>0) * SinHalfAngle; | |
double Ry = $axis(n=>1) * SinHalfAngle; | |
double Rz = $axis(n=>2) * SinHalfAngle; | |
double Rw = CosHalfAngle; | |
double Vx = $vec(n=>0); | |
double Vy = $vec(n=>1); | |
double Vz = $vec(n=>2); | |
double Vw = 0; | |
// first step | |
double x1 = ( Rx * Vw ) + ( Rw * Vx ) + ( Ry * Vz ) - ( Rz * Vy ); | |
double y1 = ( Ry * Vw ) + ( Rw * Vy ) + ( Rz * Vx ) - ( Rx * Vz ); | |
double z1 = ( Rz * Vw ) + ( Rw * Vz ) + ( Rx * Vy ) - ( Ry * Vx ); | |
double w1 = ( Rw * Vw ) - ( Rx * Vx ) - ( Ry * Vy ) - ( Rz * Vz ); | |
// conjugated quaternion | |
double Qx = Rx * -1; | |
double Qy = Ry * -1; | |
double Qz = Rz * -1; | |
double Qw = CosHalfAngle; | |
// second step | |
double x2 = ( x1 * Qw ) + ( w1 * Qx ) + ( y1 * Qz ) - ( z1 * Qy ); | |
double y2 = ( y1 * Qw ) + ( w1 * Qy ) + ( z1 * Qx ) - ( x1 * Qz ); | |
double z2 = ( z1 * Qw ) + ( w1 * Qz ) + ( x1 * Qy ) - ( y1 * Qx ); | |
double w2 = ( w1 * Qw ) - ( x1 * Qx ) - ( y1 * Qy ) - ( z1 * Qz ); | |
$vec(n=>0) = x2; | |
$vec(n=>1) = y2; | |
$vec(n=>2) = z2; | |
}, | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
[ 3.7493995e-33 3.7493995e-33] | |
[3.2608333e-322 3.2608333e-322] | |
[ 0 0] | |
] | |
timethis 40000: 0 wallclock secs ( 0.23 usr + 0.00 sys = 0.23 CPU) @ 173913.04/s (n=40000) | |
(warning: too few iterations for a reliable count) | |
*** Error in `perl': free(): invalid next size (fast): 0x0000000002387bd0 *** | |
======= Backtrace: ========= | |
/lib/x86_64-linux-gnu/libc.so.6(+0x7aa26)[0x7ff1adc29a26] | |
/lib/x86_64-linux-gnu/libc.so.6(+0x7b7a3)[0x7ff1adc2a7a3] | |
/usr/lib/libperl.so.5.14(Perl_sv_clear+0x343)[0x7ff1ae737903] | |
/usr/lib/libperl.so.5.14(Perl_sv_free2+0x52)[0x7ff1ae7381d2] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl__free+0x1e9)[0x7ff1acd42d39] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x258)[0x7ff1acd442e8] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364] | |
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(XS_PDL_DESTROY+0xb3)[0x7ff1acd37003] | |
/usr/lib/libperl.so.5.14(Perl_pp_entersub+0x58c)[0x7ff1ae73164c] | |
/usr/lib/libperl.so.5.14(Perl_call_sv+0x611)[0x7ff1ae6c4ad1] | |
/usr/lib/libperl.so.5.14(Perl_sv_clear+0x559)[0x7ff1ae737b19] | |
/usr/lib/libperl.so.5.14(Perl_sv_free2+0x52)[0x7ff1ae7381d2] | |
/usr/lib/libperl.so.5.14(Perl_leave_scope+0x122f)[0x7ff1ae75fc2f] | |
/usr/lib/libperl.so.5.14(Perl_pp_leave+0xf2)[0x7ff1ae72e052] | |
/usr/lib/libperl.so.5.14(Perl_runops_standard+0x16)[0x7ff1ae728c26] | |
/usr/lib/libperl.so.5.14(perl_run+0x3a5)[0x7ff1ae6ca755] | |
perl(main+0x149)[0x400f89] | |
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7ff1adbd0995] | |
perl[0x400fc1] | |
======= Memory map: ======== | |
00400000-00402000 r-xp 00000000 08:02 7464200 /usr/bin/perl | |
00601000-00602000 r--p 00001000 08:02 7464200 /usr/bin/perl | |
00602000-00603000 rw-p 00002000 08:02 7464200 /usr/bin/perl | |
0180a000-023c7000 rw-p 00000000 00:00 0 [heap] | |
7ff1aa3f6000-7ff1aa40c000 r-xp 00000000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1 | |
7ff1aa40c000-7ff1aa60b000 ---p 00016000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1 | |
7ff1aa60b000-7ff1aa60c000 rw-p 00015000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1 | |
7ff1aa646000-7ff1aa64d000 r-xp 00000000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so | |
7ff1aa64d000-7ff1aa84c000 ---p 00007000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so | |
7ff1aa84c000-7ff1aa84d000 r--p 00006000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so | |
7ff1aa84d000-7ff1aa84e000 rw-p 00007000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so | |
7ff1aa84e000-7ff1aa853000 r-xp 00000000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so | |
7ff1aa853000-7ff1aaa52000 ---p 00005000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so | |
7ff1aaa52000-7ff1aaa53000 rw-p 00004000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so | |
7ff1aaa53000-7ff1aaa5a000 r-xp 00000000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so | |
7ff1aaa5a000-7ff1aac59000 ---p 00007000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so | |
7ff1aac59000-7ff1aac5a000 rw-p 00006000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so | |
7ff1aac5a000-7ff1aac5e000 r-xp 00000000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so | |
7ff1aac5e000-7ff1aae5d000 ---p 00004000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so | |
7ff1aae5d000-7ff1aae5e000 rw-p 00003000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so | |
7ff1aae5e000-7ff1aae60000 r-xp 00000000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so | |
7ff1aae60000-7ff1ab05f000 ---p 00002000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so | |
7ff1ab05f000-7ff1ab060000 rw-p 00001000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so | |
7ff1ab060000-7ff1ab06c000 r-xp 00000000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so | |
7ff1ab06c000-7ff1ab26b000 ---p 0000c000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so | |
7ff1ab26b000-7ff1ab26c000 rw-p 0000b000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so | |
7ff1ab26c000-7ff1ab271000 r-xp 00000000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so | |
7ff1ab271000-7ff1ab470000 ---p 00005000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so | |
7ff1ab470000-7ff1ab471000 rw-p 00004000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so | |
7ff1ab471000-7ff1ab47a000 r-xp 00000000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so | |
7ff1ab47a000-7ff1ab679000 ---p 00009000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so | |
7ff1ab679000-7ff1ab67a000 rw-p 00008000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so | |
7ff1ab67a000-7ff1ab67c000 r-xp 00000000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so | |
7ff1ab67c000-7ff1ab87b000 ---p 00002000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so | |
7ff1ab87b000-7ff1ab87c000 r--p 00001000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so | |
7ff1ab87c000-7ff1ab87d000 rw-p 00002000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so | |
7ff1ab87d000-7ff1ab89e000 r-xp 00000000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so | |
7ff1ab89e000-7ff1aba9e000 ---p 00021000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so | |
7ff1aba9e000-7ff1aba9f000 rw-p 00021000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so | |
7ff1aba9f000-7ff1abb42000 r-xp 00000000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so | |
7ff1abb42000-7ff1abd42000 ---p 000a3000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so | |
7ff1abd42000-7ff1abd45000 rw-p 000a3000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so | |
7ff1abd45000-7ff1abe01000 r-xp 00000000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so | |
7ff1abe01000-7ff1ac000000 ---p 000bc000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so | |
7ff1ac000000-7ff1ac003000 rw-p 000bb000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so | |
7ff1ac003000-7ff1ac04a000 r-xp 00000000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so | |
7ff1ac04a000-7ff1ac249000 ---p 00047000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so | |
7ff1ac249000-7ff1ac24c000 rw-p 00046000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so | |
7ff1ac24c000-7ff1ac261000 r-xp 00000000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so | |
7ff1ac261000-7ff1ac461000 ---p 00015000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so | |
7ff1ac461000-7ff1ac462000 rw-p 00015000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so | |
7ff1ac462000-7ff1ac465000 r-xp 00000000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so | |
7ff1ac465000-7ff1ac664000 ---p 00003000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so | |
7ff1ac664000-7ff1ac665000 r--p 00002000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so | |
7ff1ac665000-7ff1ac666000 rw-p 00003000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so | |
7ff1ac666000-7ff1ac66a000 r-xp 00000000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so | |
7ff1ac66a000-7ff1ac869000 ---p 00004000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so | |
7ff1ac869000-7ff1ac86a000 r--p 00003000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so | |
7ff1ac86a000-7ff1ac86b000 rw-p 00004000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so | |
7ff1ac86b000-7ff1ac8ca000 r-xp 00000000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so | |
7ff1ac8ca000-7ff1acac9000 ---p 0005f000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so | |
7ff1acac9000-7ff1acacb000 rw-p 0005e000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so | |
7ff1acacb000-7ff1acb28000 r-xp 00000000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so | |
7ff1acb28000-7ff1acd28000 ---p 0005d000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so | |
7ff1acd28000-7ff1acd2a000 rw-p 0005d000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so | |
7ff1acd2a000-7ff1acd4f000 r-xp 00000000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so | |
7ff1acd4f000-7ff1acf4f000 ---p 00025000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so | |
7ff1acf4f000-7ff1acf50000 rw-p 00025000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so | |
7ff1acf50000-7ff1acf56000 r-xp 00000000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so | |
7ff1acf56000-7ff1ad155000 ---p 00006000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so | |
7ff1ad155000-7ff1ad156000 rw-p 00005000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so | |
7ff1ad156000-7ff1ad158000 r-xp 00000000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so | |
7ff1ad158000-7ff1ad357000 ---p 00002000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so | |
7ff1ad357000-7ff1ad358000 rw-p 00001000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so | |
7ff1ad358000-7ff1ad36b000 r-xp 00000000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so | |
7ff1ad36b000-7ff1ad56a000 ---p 00013000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so | |
7ff1ad56a000-7ff1ad56b000 rw-p 00012000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so | |
7ff1ad56b000-7ff1ad56f000 r-xp 00000000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so | |
7ff1ad56f000-7ff1ad76e000 ---p 00004000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so | |
7ff1ad76e000-7ff1ad76f000 r--p 00003000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so | |
7ff1ad76f000-7ff1ad770000 rw-p 00004000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so | |
7ff1ad770000-7ff1ad778000 r-xp 00000000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so | |
7ff1ad778000-7ff1ad977000 ---p 00008000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so | |
7ff1ad977000-7ff1ad978000 rw-p 00007000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so | |
7ff1ad978000-7ff1ad980000 r-xp 00000000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so | |
7ff1ad980000-7ff1adb7f000 ---p 00008000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so | |
7ff1adb7f000-7ff1adb80000 r--p 00007000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so | |
7ff1adb80000-7ff1adb81000 rw-p 00008000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so | |
7ff1adb81000-7ff1adbaf000 rw-p 00000000 00:00 0 | |
7ff1adbaf000-7ff1add51000 r-xp 00000000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so | |
7ff1add51000-7ff1adf51000 ---p 001a2000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so | |
7ff1adf51000-7ff1adf55000 r--p 001a2000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so | |
7ff1adf55000-7ff1adf57000 rw-p 001a6000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so | |
7ff1adf57000-7ff1adf5b000 rw-p 00000000 00:00 0 Aborted |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment