mmf
Class MMF_TrapModeSmoothSecondClosest

Object
  extended by common:Generic
      extended by common:TrapMode
          extended by common:TrapModeWithThreshold
              extended by mmf:MMF_TrapModeSmoothWithThreshold
                  extended by mmf:MMF_TrapModeSmoothSecondClosest
Direct Known Subclasses:
MMF_TrapModeSmoothTwoClosest

class 
MMF_TrapModeSmoothWithThreshold:MMF_TrapModeSmoothSecondClosest

Returns the differences between the closest and second closest trapped iterations.


Ultra Fractal Source

Toggle UF Source Code Display

 class MMF_TrapModeSmoothSecondClosest(MMF_TrapModeSmoothWithThreshold) {
 ; Returns the differences between the closest and second closest trapped
 ; iterations.<br>
 public:
   import "common.ulb"
 
   func MMF_TrapModeSmoothSecondClosest(Generic pparent)
     MMF_TrapModeSmoothWithThreshold.MMF_TrapModeSmoothWithThreshold(pparent)
   endfunc
   
   func Init(complex pz)
     m_Iterations = 0
     m_Solid = true
     int j = 3
      repeat
       m_UntransformedPoints[j] = m_OldUntransformedPoints[j] = (0,0)
       m_TransformedPoints[j] = m_OldTransformedPoints[j] = (0,0)
        m_IterationPoints[j] = m_OldIterationPoints[j] = 0
        m_Distances[j] = m_OldDistances[j] = 1e20
       m_Textures[j] = m_OldTextures[j] = 0.0
      until  (j=j-1)<0
      m_wastrapped = false
   endfunc
   
   func Iterate(complex pz, complex pzt, float pdistance, float ptexture)
     if m_wastrapped
       m_OldDistances[0] = m_Distances[0]
       m_OldTextures[0] = m_Textures[0]
       m_OldUntransformedPoints[0] = m_UntransformedPoints[0]
       m_OldTransformedPoints[0] = m_TransformedPoints[0]
       m_OldIterationPoints[0] = m_IterationPoints[0]
       m_OldDistances[1] = m_Distances[1]
       m_OldTextures[1] = m_Textures[1]
       m_OldUntransformedPoints[1] = m_UntransformedPoints[1]
       m_OldTransformedPoints[1] = m_TransformedPoints[1]
       m_OldIterationPoints[1] = m_IterationPoints[1]
     endif
     m_Iterations = m_Iterations + 1
     if (pdistance < m_Threshold)
       m_Solid = false
     endif
     if pdistance < m_Distances[0]
       m_Distances[1] = m_Distances[0]
       m_Textures[1] = m_Textures[0]
       m_UntransformedPoints[1] = m_UntransformedPoints[0]
       m_TransformedPoints[1] = m_TransformedPoints[0]
       m_IterationPoints[1] = m_IterationPoints[0]
 
       m_Distances[0] = pdistance
       m_Textures[0] = ptexture
       m_UntransformedPoints[0] = pz
       m_TransformedPoints[0] = pzt
       m_IterationPoints[0] = m_Iterations
       m_wastrapped = true
     elseif pdistance<m_Distances[1]
       m_Distances[1] = pdistance
       m_Textures[1] = ptexture
       m_UntransformedPoints[1] = pz
       m_TransformedPoints[1] = pzt
       m_IterationPoints[1] = m_Iterations
       m_wastrapped = true
     endif
   endfunc
 
   func IterateSilent()
     if m_wastrapped
       m_OldDistances[0] = m_Distances[0]
       m_OldTextures[0] = m_Textures[0]
       m_OldUntransformedPoints[0] = m_UntransformedPoints[0]
       m_OldTransformedPoints[0] = m_TransformedPoints[0]
       m_OldIterationPoints[0] = m_IterationPoints[0]
       m_OldDistances[1] = m_Distances[1]
       m_OldTextures[1] = m_Textures[1]
       m_OldUntransformedPoints[1] = m_UntransformedPoints[1]
       m_OldTransformedPoints[1] = m_TransformedPoints[1]
       m_OldIterationPoints[1] = m_IterationPoints[1]
       m_wastrapped = false
     endif
     m_Iterations = m_Iterations + 1
   endfunc
 
   func Result()
     m_Distances[0] = abs(m_Distances[0] - m_Distances[1])
     m_Textures[0] = m_Textures[0] - m_Textures[1]
     m_UntransformedPoints[0] = m_UntransformedPoints[0] \
                                - m_UntransformedPoints[1]
     m_TransformedPoints[0] = m_TransformedPoints[0] \
                              - m_TransformedPoints[1]
     m_IterationPoints[0] = abs(m_IterationPoints[0] \
                                - m_IterationPoints[1])
   endfunc
 
   func OldResult()
     if m_OldIterationPoints[1]>0
       m_Distances[0] = abs(m_OldDistances[0] - m_OldDistances[1])
       m_Textures[0] = m_OldTextures[0] - m_OldTextures[1]
       m_UntransformedPoints[0] = m_OldUntransformedPoints[0] \
                                  - m_OldUntransformedPoints[1]
       m_TransformedPoints[0] = m_OldTransformedPoints[0] \
                                - m_OldTransformedPoints[1]
       m_IterationPoints[0] = abs(m_OldIterationPoints[0] \
                                  - m_OldIterationPoints[1])
       m_Iterations = m_Iterations - 1
     endif
   endfunc
   
 default:
   title = "Smooth Second Closest"
   rating = recommended
 }
 


Constructor Summary
MMF_TrapModeSmoothSecondClosest()
           
MMF_TrapModeSmoothSecondClosest(Generic pparent)
           
 
Method Summary
 void Init(complex pz)
          call this at the beginning of each sequence
 void Iterate(complex pz, complex pzt, float pdistance, float ptexture)
          call this for each point
 void IterateSilent()
          call this for each point that is ignored (for smooth orbit traps)
if the last point was trapped then copy the current values into the "old" ones
 void OldResult()
          call this to compute penultimate results
 void Result()
          call this to compute final results
 
Methods inherited from class common:TrapModeWithThreshold
GetThreshold, SetThreshold, UsesThreshold
 
Methods inherited from class common:TrapMode
GetDistance, GetIteration, GetTexture, GetTransformedPoint, GetUntransformedPoint, IsSolid
 
Methods inherited from class common:Generic
GetParent
 
Methods inherited from class Object
 

Constructor Detail

MMF_TrapModeSmoothSecondClosest

public MMF_TrapModeSmoothSecondClosest(Generic pparent)

MMF_TrapModeSmoothSecondClosest

public MMF_TrapModeSmoothSecondClosest()
Method Detail

Init

public void Init(complex pz)
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this at the beginning of each sequence

Overrides:
Init in class MMF_TrapModeSmoothWithThreshold
Parameters:
pz - the initial z value

Iterate

public void Iterate(complex pz,
                    complex pzt,
                    float pdistance,
                    float ptexture)
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this for each point

Note that derived functions should always copy all used parameters to the "old" versions when they are changed as here.

m_wastrapped should be set to true in the derived function when the main (current) values get changed

Overrides:
Iterate in class MMF_TrapModeSmoothWithThreshold
Parameters:
pz - the z value
pzt - the transformed z value
pdistance - the trap distance
ptexture - tyhe texture value

IterateSilent

public void IterateSilent()
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this for each point that is ignored (for smooth orbit traps)
if the last point was trapped then copy the current values into the "old" ones

Overrides:
IterateSilent in class MMF_TrapModeSmoothWithThreshold

Result

public void Result()
Description copied from class: TrapMode
call this to compute final results

Overrides:
Result in class TrapMode

OldResult

public void OldResult()
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this to compute penultimate results

This should only be called after previously calling Result() and getting the actual result value using the Trap Color Mode since the original result values are destroyed by this call.

Overrides:
OldResult in class MMF_TrapModeSmoothWithThreshold