http://www.heise.de/newsticker/meldung/Videospielen-in-3D-intensiviert-den-Zorn-2431744.html
25.10.2014
20.10.2014
howto allocate array in C++ and pass it back to fortran
test.cpp
#include < stdlib.h >
// fortran can only call C routines
extern "C" {
// we need the address of the fortran pointer thus a pointer of a pointer.
void myC_func(int **arr) {
// we cannot use new() here because fortran deallocate() use free() instead of delete[]
*arr = (int*) malloc(12*sizeof(int));
for(int i=0; i < 12; i++) {
(*arr)[i] = i;
}
}
}
test.F90
! https://gcc.gnu.org/onlinedocs/gcc-4.6.2/gfortran/Working-with-Pointers.html
program main
use iso_c_binding
implicit none
interface
subroutine my_routine(arr) bind(c,name='myC_func')
import :: c_ptr
! If a pointer is a dummy-argument of an interoperable procedure,
! it usually has to be declared using the VALUE attribute.
! void* matches TYPE(C_PTR), VALUE, while TYPE(C_PTR) alone matches void**.
type(c_ptr), intent(out) :: arr
end subroutine
end interface
type(c_ptr) :: cptr
integer,pointer :: fptr(:)
! allocate and fill cptr
call my_routine(cptr)
! convert it to fortran pointer
call c_f_pointer(cptr, fptr, [12])
if(associated(fptr)) write(*,*) "associated"
write(*,*) fptr
deallocate(fptr)
end program main
g++ -Wall -Wextra -c test.cpp gfortran -Wall -Wextra -fcheck=all test.F90 test.o valgrind ./a.out ==5256== Memcheck, a memory error detector ==5256== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==5256== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info ==5256== Command: ./a.out ==5256== associated 0 1 2 3 4 5 6 7 8 9 10 11 ==5256== ==5256== HEAP SUMMARY: ==5256== in use at exit: 0 bytes in 0 blocks ==5256== total heap usage: 22 allocs, 22 frees, 11,874 bytes allocated ==5256== ==5256== All heap blocks were freed -- no leaks are possible ==5256== ==5256== For counts of detected and suppressed errors, rerun with: -v ==5256== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
14.10.2014
eneloop pro 2450mAh Akku Erfahrungsbericht
Es wurde Zeit für ein Satz neuer Akkus für die Farradlampe. Drei von vier Akkus haben nur noch die hälfte an Kapazität und einer ist ganz hinnüber (nachdem er mir mal in die Sandbach gefallen war).
Also bin ich zum Batterie Kaiser gefahren und hab mir 4 neue geholt. Für 20Eur. Macht 5Eur das Stück. Für den Preis müssen die Akkus mich aber überzeugen. Das meinte auch die Verkäuferin. Die eneloop Akkus sollen eine waagerechte Entladekurve haben. Da da bin ich mal gespannt.
Ich werde einige Lade- und Entladekurven mit unterschiedlichen Ström aufzeichnen.
Eine genaue Angabe auf der Panasonic Webseite wie lange und mit welchem Strom die Akkus geladen werden, habe ich nicht gefunden. Die Passenden Ladegeräte brauchen etwa 7h für 2000mAh, wenn ich die Angaben richtig gedeutet habe. Das macht 285mA also werde ich mit 300mA laden. Mit 400mA ging es bestimmt auch.
Hier ist die dritte Entladekurve. Sie fällt schön flach ab. Man bräuhte mal einen anderen Akku zum vergleichen...
Mit Solarstrom vorgeladen.
Nette Idee. Mit einem Entladestrom von 0.6A kamen noch 1100mAh aus dem Akku. Also lässt sich der Akku durchaus ohne vorheriges Laden verwenden.
...
07.10.2014
Faster Code – Part 6 – Sprungvorhersage - anschaulich
Sehr schöne anschauliche Erklärung:
04.10.2014
merge/connect nearby poylgons
Zwei Polygone verbinden die sich überlappen ist einfach (union).
Aber was, wenn sich die Polygone nur berühren oder einen sehr kleinen Abstand von einander haben?
Im Internet findet man kaum etwas. Hier findet man einen Ansatz über die Konvexe Hülle. Ich hab ihn mir noch nicht genauer angesehen.
Mein Ansatz basiert darauf, die Polygone so zu verbinden, wie man das als Mensch auch machen würde. Also an den Stellen, wo sie sich zu nahe kommen, werden sie verbunden. Und die restlichen, dann überflüssigen, Teile vom Polygon gelöscht.
Um zu verdeutlichen was genau gemeint ist und wie die Ergebnisse aussehen, hier ein kleines Video.
Die jetzige Version funktioniert recht stabil. Es gibt noch zwei Sonderfälle die zu behandeln sind. Von der Komplexität her hat der Algorithmus eine quadratische Laufzeit und kann Theoretisch auf linear-logarithmisch gesenkt werden.
Aber erstmal werde ich überprüfen, ob der Algorithmus auch auf realen Daten zufriedenstellende Ergebnisse liefert.