Skip to content

Commit c6074de

Browse files
committed
add tests for QuaterControllers eg ArcCone
1 parent ce45b2b commit c6074de

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

Changes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
- non-trivial tests added
2+
13
2.100 2025-01-16
24
- adjust MathGraph and Labels so Debian packaging is happy
35

MANIFEST

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@ lib/PDL/Graphics/VRML/Protos.pm
4343
Makefile.PL
4444
MANIFEST This list of files
4545
MANIFEST.SKIP
46+
t/arcball.t
4647
t/opengl.t

lib/PDL/Graphics/TriD/ArcBall.pm

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
package PDL::Graphics::TriD::QuaterController;
1313
use strict;
1414
use warnings;
15+
use PDL::Graphics::TriD::Quaternion;
1516
use base qw(PDL::Graphics::TriD::ButtonControl);
1617
use fields qw /Inv Quat/;
1718

@@ -67,7 +68,7 @@ sub normxy2qua {
6768
my($this,$x,$y) = @_;
6869
$x /= $this->{SC}; $y /= $this->{SC};
6970
my $dist = sqrt ($x ** 2 + $y ** 2);
70-
if($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
71+
if ($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
7172
my $z = sqrt(1-$dist**2);
7273
return PDL::Graphics::TriD::Quaternion->new(0,$x,$y,$z);
7374
}
@@ -82,7 +83,7 @@ sub normxy2qua {
8283
my($this,$x,$y) = @_;
8384
$x /= $this->{SC}; $y /= $this->{SC};
8485
my $dist = sqrt ($x ** 2 + $y ** 2);
85-
if($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
86+
if ($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
8687
my $z = 1-$dist;
8788
my $qua = PDL::Graphics::TriD::Quaternion->new(0,$x,$y,$z);
8889
$qua->normalize_this();
@@ -99,7 +100,7 @@ sub normxy2qua {
99100
my($this,$x,$y) = @_;
100101
$x /= $this->{SC}; $y /= $this->{SC};
101102
my $dist = sqrt ($x ** 2 + $y ** 2);
102-
if($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
103+
if ($dist > 1.0) {$x /= $dist; $y /= $dist; $dist = 1.0;}
103104
my $z = cos($dist*3.142/2);
104105
my $qua = PDL::Graphics::TriD::Quaternion->new(0,$x,$y,$z);
105106
$qua->normalize_this();

t/arcball.t

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
use strict;
2+
use warnings;
3+
use Test::More;
4+
5+
use PDL::Graphics::TriD::ArcBall;
6+
use PDL::LiteF;
7+
use Test::PDL;
8+
{package FakeWindow; sub new {bless {}} sub add_resizecommand {} }
9+
10+
sub is_qua {
11+
local $Test::Builder::Level = $Test::Builder::Level + 1;
12+
my ($got, $exp) = map PDL->pdl(@$_), @_;
13+
is_pdl $got, $exp;
14+
}
15+
16+
my $win = FakeWindow->new;
17+
18+
my $arcball = PDL::Graphics::TriD::ArcBall->new($win);
19+
isa_ok $arcball, 'PDL::Graphics::TriD::ArcBall';
20+
$arcball->set_wh(100,100);
21+
is_qua $arcball->xy2qua(50,50), [0,0,0,1];
22+
is_qua $arcball->xy2qua(25,25), [0,-0.5,0.5,0.707106];
23+
is_qua $arcball->xy2qua(25,50), [0,-0.5,0,0.866025];
24+
is_qua $arcball->xy2qua(25,75), [0,-0.5,-0.5,0.707106];
25+
is_qua $arcball->xy2qua(75,25), [0,0.5,0.5,0.707106];
26+
is_qua $arcball->xy2qua(75,50), [0,0.5,0,0.866025];
27+
is_qua $arcball->xy2qua(75,75), [0,0.5,-0.5,0.707106];
28+
29+
my $arccone = PDL::Graphics::TriD::ArcCone->new($win);
30+
isa_ok $arccone, 'PDL::Graphics::TriD::ArcCone';
31+
$arccone->set_wh(100,100);
32+
is_qua $arccone->xy2qua(50,50), [0,0,0,1];
33+
is_qua $arccone->xy2qua(25,25), [0,-0.653281,0.653281,0.382683];
34+
is_qua $arccone->xy2qua(25,50), [0,-0.707106,0,0.707106];
35+
is_qua $arccone->xy2qua(25,75), [0,-0.653281,-0.653281,0.382683];
36+
is_qua $arccone->xy2qua(75,25), [0,0.653281,0.653281,0.382683];
37+
is_qua $arccone->xy2qua(75,50), [0,0.707106,0,0.707106];
38+
is_qua $arccone->xy2qua(75,75), [0,0.653281,-0.653281,0.382683];
39+
40+
my $arcbowl = PDL::Graphics::TriD::ArcBowl->new($win);
41+
isa_ok $arcbowl, 'PDL::Graphics::TriD::ArcBowl';
42+
$arcbowl->set_wh(100,100);
43+
is_qua $arcbowl->xy2qua(50,50), [0,0,0,1];
44+
is_qua $arcbowl->xy2qua(25,25), [0,-0.598883,0.598883,0.531673];
45+
is_qua $arcbowl->xy2qua(25,50), [0,-0.577389,0,0.816468];
46+
is_qua $arcbowl->xy2qua(25,75), [0,-0.598883,-0.598883,0.531673];
47+
is_qua $arcbowl->xy2qua(75,25), [0,0.598883,0.598883,0.531673];
48+
is_qua $arcbowl->xy2qua(75,50), [0,0.577389,0,0.816468];
49+
is_qua $arcbowl->xy2qua(75,75), [0,0.598883,-0.598883,0.531673];
50+
51+
done_testing;

0 commit comments

Comments
 (0)