C++Guns – RoboBlog blogging the bot

25.10.2014

Note Videospiele

Filed under: Allgemein — Thomas @ 10:10

http://www.heise.de/newsticker/meldung/Videospielen-in-3D-intensiviert-den-Zorn-2431744.html

20.10.2014

howto allocate array in C++ and pass it back to fortran

Filed under: Allgemein — Tags: , , — Thomas @ 12:10

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

Filed under: Allgemein — Thomas @ 23:10

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...

Dritte Entladekurve mit 0.6A

Dritte Entladekurve mit 0.6A

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.

Entladekurve eines frisch gekauften Akkus

Entladekurve eines frisch gekauften Akkus


...

07.10.2014

Faster Code – Part 6 – Sprungvorhersage - anschaulich

Filed under: Allgemein — Tags: , , — Thomas @ 12:10

Sehr schöne anschauliche Erklärung:

http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array

04.10.2014

merge/connect nearby poylgons

Filed under: Allgemein — Tags: , — Thomas @ 13:10

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.

Powered by WordPress