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 1127 of file kis_algebra_2d.h.

Constructor & Destructor Documentation

◆ HaltonSequenceGenerator()

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

Definition at line 1130 of file kis_algebra_2d.h.

1131 : m_base(base)
1132 {
1133 }

Member Function Documentation

◆ currentValue() [1/2]

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

Definition at line 1153 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 1149 of file kis_algebra_2d.h.

1149 {
1150 return (m_n * maxRange + m_d / 2) / m_d;
1151 }

References m_d, and m_n.

◆ generate() [1/2]

qreal KisAlgebra2D::HaltonSequenceGenerator::generate ( )
inline

Definition at line 1140 of file kis_algebra_2d.h.

1140 {
1142 return qreal(m_n) / m_d;
1143 }

References generationStep(), m_d, and m_n.

◆ generate() [2/2]

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

Definition at line 1135 of file kis_algebra_2d.h.

1135 {
1137 return (m_n * maxRange + m_d / 2) / m_d;
1138 }

References generationStep(), m_d, and m_n.

◆ generationStep()

void KisAlgebra2D::HaltonSequenceGenerator::generationStep ( )
inlineprivate

Definition at line 1158 of file kis_algebra_2d.h.

1158 {
1159 int x = m_d - m_n;
1160
1161 if (x == 1) {
1162 m_n = 1;
1163 m_d *= m_base;
1164 } else {
1165 int y = m_d / m_base;
1166 while (x <= y) {
1167 y /= m_base;
1168 }
1169 m_n = (m_base + 1) * y - x;
1170 }
1171 }

References m_base, m_d, and m_n.

◆ step()

void KisAlgebra2D::HaltonSequenceGenerator::step ( )
inline

Definition at line 1145 of file kis_algebra_2d.h.

1145 {
1147 }

References generationStep().

Member Data Documentation

◆ m_base

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

Definition at line 1176 of file kis_algebra_2d.h.

◆ m_d

int KisAlgebra2D::HaltonSequenceGenerator::m_d = 1
private

Definition at line 1175 of file kis_algebra_2d.h.

◆ m_n

int KisAlgebra2D::HaltonSequenceGenerator::m_n = 0
private

Definition at line 1174 of file kis_algebra_2d.h.


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