Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAlgebra2D::HaltonSequenceGenerator Class Reference

a simple class to generate Halton sequence More...

#include <kis_algebra_2d.h>

Public Member Functions

qreal currentValue () const
 
int currentValue (int maxRange) const
 
qreal generate ()
 
int generate (int maxRange)
 
 HaltonSequenceGenerator (int base)
 
void step ()
 

Private Member Functions

void generationStep ()
 

Private Attributes

const int m_base = 0
 
int m_d = 1
 
int m_n = 0
 

Detailed Description

a simple class to generate Halton sequence

This sequence of numbers can be used to sample areas in somewhat uniform way. See Wikipedia for more info:

https://en.wikipedia.org/wiki/Halton_sequence

Definition at line 864 of file kis_algebra_2d.h.

Constructor & Destructor Documentation

◆ HaltonSequenceGenerator()

KisAlgebra2D::HaltonSequenceGenerator::HaltonSequenceGenerator ( int base)
inline

Definition at line 867 of file kis_algebra_2d.h.

868 : m_base(base)
869 {
870 }

Member Function Documentation

◆ currentValue() [1/2]

qreal KisAlgebra2D::HaltonSequenceGenerator::currentValue ( ) const
inline

Definition at line 890 of file kis_algebra_2d.h.

References m_d, and m_n.

◆ currentValue() [2/2]

int KisAlgebra2D::HaltonSequenceGenerator::currentValue ( int maxRange) const
inline

Definition at line 886 of file kis_algebra_2d.h.

886 {
887 return (m_n * maxRange + m_d / 2) / m_d;
888 }

References m_d, and m_n.

◆ generate() [1/2]

qreal KisAlgebra2D::HaltonSequenceGenerator::generate ( )
inline

Definition at line 877 of file kis_algebra_2d.h.

877 {
879 return qreal(m_n) / m_d;
880 }

References generationStep(), m_d, and m_n.

◆ generate() [2/2]

int KisAlgebra2D::HaltonSequenceGenerator::generate ( int maxRange)
inline

Definition at line 872 of file kis_algebra_2d.h.

872 {
874 return (m_n * maxRange + m_d / 2) / m_d;
875 }

References generationStep(), m_d, and m_n.

◆ generationStep()

void KisAlgebra2D::HaltonSequenceGenerator::generationStep ( )
inlineprivate

Definition at line 895 of file kis_algebra_2d.h.

895 {
896 int x = m_d - m_n;
897
898 if (x == 1) {
899 m_n = 1;
900 m_d *= m_base;
901 } else {
902 int y = m_d / m_base;
903 while (x <= y) {
904 y /= m_base;
905 }
906 m_n = (m_base + 1) * y - x;
907 }
908 }

References m_base, m_d, and m_n.

◆ step()

void KisAlgebra2D::HaltonSequenceGenerator::step ( )
inline

Definition at line 882 of file kis_algebra_2d.h.

882 {
884 }

References generationStep().

Member Data Documentation

◆ m_base

const int KisAlgebra2D::HaltonSequenceGenerator::m_base = 0
private

Definition at line 913 of file kis_algebra_2d.h.

◆ m_d

int KisAlgebra2D::HaltonSequenceGenerator::m_d = 1
private

Definition at line 912 of file kis_algebra_2d.h.

◆ m_n

int KisAlgebra2D::HaltonSequenceGenerator::m_n = 0
private

Definition at line 911 of file kis_algebra_2d.h.


The documentation for this class was generated from the following file: