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

Constructor & Destructor Documentation

◆ HaltonSequenceGenerator()

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

Definition at line 1120 of file kis_algebra_2d.h.

1121 : m_base(base)
1122 {
1123 }

Member Function Documentation

◆ currentValue() [1/2]

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

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

1139 {
1140 return (m_n * maxRange + m_d / 2) / m_d;
1141 }

References m_d, and m_n.

◆ generate() [1/2]

qreal KisAlgebra2D::HaltonSequenceGenerator::generate ( )
inline

Definition at line 1130 of file kis_algebra_2d.h.

1130 {
1132 return qreal(m_n) / m_d;
1133 }

References generationStep(), m_d, and m_n.

◆ generate() [2/2]

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

Definition at line 1125 of file kis_algebra_2d.h.

1125 {
1127 return (m_n * maxRange + m_d / 2) / m_d;
1128 }

References generationStep(), m_d, and m_n.

◆ generationStep()

void KisAlgebra2D::HaltonSequenceGenerator::generationStep ( )
inlineprivate

Definition at line 1148 of file kis_algebra_2d.h.

1148 {
1149 int x = m_d - m_n;
1150
1151 if (x == 1) {
1152 m_n = 1;
1153 m_d *= m_base;
1154 } else {
1155 int y = m_d / m_base;
1156 while (x <= y) {
1157 y /= m_base;
1158 }
1159 m_n = (m_base + 1) * y - x;
1160 }
1161 }

References m_base, m_d, and m_n.

◆ step()

void KisAlgebra2D::HaltonSequenceGenerator::step ( )
inline

Definition at line 1135 of file kis_algebra_2d.h.

1135 {
1137 }

References generationStep().

Member Data Documentation

◆ m_base

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

Definition at line 1166 of file kis_algebra_2d.h.

◆ m_d

int KisAlgebra2D::HaltonSequenceGenerator::m_d = 1
private

Definition at line 1165 of file kis_algebra_2d.h.

◆ m_n

int KisAlgebra2D::HaltonSequenceGenerator::m_n = 0
private

Definition at line 1164 of file kis_algebra_2d.h.


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