add rotation, need more tests

This commit is contained in:
Tonton Th
2026-05-21 16:23:06 +02:00
parent 3d4fce2ed0
commit 0bc55225fc
4 changed files with 112 additions and 21 deletions

View File

@@ -7,8 +7,11 @@ all: testbed
genplotting.o: genplotting.f90 Makefile
gfortran -Wall -c $<
testbed: testbed.f90 Makefile genplotting.o
gfortran -Wall $< genplotting.o -o $@
genp_tests.o: genp_tests.f90 genplotting.o Makefile
gfortran -Wall -c $<
testbed: testbed.f90 Makefile genp_tests.o genplotting.o
gfortran -Wall $< genplotting.o genp_tests.o -o $@
# -----------------------------------------------

41
genp_tests.f90 Normal file
View File

@@ -0,0 +1,41 @@
!
! MODULE FOR TESTING THE GENPLOTTING MODULE
!
! this crapware is released by tTh under the
! DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
!
! new Sun May 17 11:21:39 AM UTC 2026
module genp_tests
use genplotting
implicit none
contains
! ---------------------------------------------------------
subroutine genp_test_rotation()
real :: mat(3, 3)
real :: pta(3), ptb(3)
integer :: pass, i, j
write(0, '("*** TEST ROTATION ***")' )
do pass=1, 90
call genp_set_rotation (real(pass)*0.10)
write(0, *) " * the matrix was : "
call genp_get_rot_matrix(mat)
do i=1, 3
do j=1, 3
write (0, '(" ", F8.5)', advance='no') mat(i,j)
end do
write(0, *)
end do
call genp_move(0.0, 0.0)
pta(1) = 11.0 ; pta(2) = 0.0 ; pta(3) = 0.0
ptb = matmul(mat, pta)
write(0, '(" got XY: ", F8.5, " ", F8.5)') ptb(1), ptb(2)
call genp_draw(ptb(1), ptb(2), 1+mod(pass, 7))
end do ! pass
end subroutine
! ---------------------------------------------------------
end module

View File

@@ -11,8 +11,9 @@ module genplotting
real :: xoffset, yoffset, xscale, yscale
private :: xoffset, yoffset, xscale, yscale
real :: rotation
private :: rotation
real :: rotation, rotmatrix(3,3)
private :: rotation, rotmatrix, compute_rot_matrix
private :: print_rot_matrix
integer :: outunit = 6
private :: outunit
@@ -21,7 +22,7 @@ contains
! ---------------------------------------------------------
! the first parameter _must_ be 0.
! the second can be
! - the name of a file for recoding plot instructions
! - the name of a file for recording plot instructions
! or
! - an empty string for send plot command to stdout
!
@@ -44,6 +45,7 @@ subroutine genp_init (foo, fname)
ymin = 9e9 ; ymax = -9e9
xoffset = 0.0 ; yoffset = 0.0
xscale = 1.0 ; yscale = 1.0
rotation = 0.0
end subroutine
@@ -67,6 +69,56 @@ subroutine genp_get_scale(sx, sy)
sx = xscale ; sy = yscale
end subroutine
! ---------------------------------------------------------
! this is a private procedure, don't call it from your prog
subroutine compute_rot_matrix(angle)
real, intent(in) :: angle
write (0, '("compute rot matrix for", F8.5, " radians")') &
angle
rotmatrix (1, 1) = cos(angle)
rotmatrix (1, 2) = sin(angle)
rotmatrix (1, 3) = 0.0
rotmatrix (2, 1) = -sin(angle)
rotmatrix (2, 2) = cos(angle)
rotmatrix (2, 3) = 0.0
rotmatrix (3, 1) = 0.0
rotmatrix (3, 2) = 0.0
rotmatrix (3, 3) = 1.0
end subroutine
! -----------------
! we have computed some fancy numbers
! and we want to see them !
subroutine print_rot_matrix(fd)
integer, intent(in) :: fd
integer :: i, j
do i=1, 3
do j=1, 3
write (fd, '(" ", F8.5)', advance='no') rotmatrix(i,j)
end do
write(fd, *)
end do
end subroutine
! ---------------------------------------------------------
subroutine genp_set_rotation(angle)
real, intent(in) :: angle
rotation = angle
! compute the matrix here !
call compute_rot_matrix(angle)
! call print_rot_matrix(0)
end subroutine
real function genp_get_rotation()
genp_get_rotation = rotation
end function
subroutine genp_get_rot_matrix (dst)
real, intent(out) :: dst(3, 3)
dst = rotmatrix
end subroutine
! ---------------------------------------------------------
subroutine genp_move (px, py)
real, intent(in) :: px, py
real :: lx, ly
@@ -138,7 +190,7 @@ end subroutine
subroutine genp_end (foo)
integer, intent(in) :: foo
write (0, '("--- genp_end ---")')
write (0, '("------------- genp_end -------------")')
write (0, '("minmax X ", 2F18.5)') xmin, xmax
write (0, '("minmax Y ", 2F18.5)') ymin, ymax

View File

@@ -1,23 +1,18 @@
!
! TESTBED FOR GENPLOTTING90
!
! this crapware is released by tTh under the
! DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
!
program testbed
use genplotting
use genp_tests
implicit none
integer idx
real fdx, xp, yp, scx, scy
call genp_init(0, "foo.scratch")
scx = 0.8 ; scy = 1.5
do idx=5, 60
fdx = real(idx)
xp = 3.5 * cos((fdx/14.0)-0.7)
yp = 3.5 * sin((fdx/10.0)+0.3)
call genp_set_offset(xp, yp)
call genp_set_scale(scx, scy)
call genp_circle(fdx, 60, 1+mod(idx, 3))
scx = scx + 0.0075
scy = scy - 0.0075
enddo
call genp_test_rotation()
! call genp_plot_axes(5.1)
call genp_end(0)
call genp_do_render("foo.scratch", "foo.tga", 512, 512)
end program