Axiom.Demos.Julia.eval C# (CSharp) Method

eval() public method

public eval ( float x, float y, float z ) : float
x float
y float
z float
return float
        public float eval( float x, float y, float z )
        {
            Quat q = new Quat(), temp = new Quat();
            int i;

            q.r = x;
            q.i = y;
            q.j = z;
            q.k = 0.0f;

            for ( i = 30; i > 0; i-- )
            {
                qsqr( ref temp, ref q );
                qmult( ref q, ref emio, ref temp );
                qadd( ref q, ref c );

                if ( q.r * q.r + q.i * q.i + q.j * q.j + q.k * q.k > 8.0 )
                    break;
            }

            return ( (float)i );
        }

Usage Example

Beispiel #1
0
        private void Generate()
        {
            Julia julia = new Julia( global_real, global_imag, global_theta );
            float scale = 2.5f;
            float vcut = 29.0f;
            float vscale = 1.0f / vcut;

            HardwarePixelBuffer buffer = mPTex.GetBuffer( 0, 0 );

            IntPtr Data = buffer.Lock( BufferLocking.Normal );
            unsafe
            {
                PixelBox pb = buffer.CurrentLock;
                int* pbptr = (int*)pb.Data.ToPointer();
                for ( int z = pb.Front; z < pb.Back; z++ )
                {
                    for ( int y = pb.Top; y < pb.Bottom; y++ )
                    {
                        for ( int x = pb.Left; x < pb.Right; x++ )
                        {
                            if ( z == pb.Front || z == ( pb.Back - 1 ) || y == pb.Top || y == ( pb.Bottom - 1 ) ||
                                x == pb.Left || x == ( pb.Right - 1 ) )
                            {
                                // On border, must be zero
                                pbptr[ x ] = 0;
                            }
                            else
                            {
                                float val = julia.eval( ( (float)x / pb.Width - 0.5f ) * scale,
                                        ( (float)y / pb.Height - 0.5f ) * scale,
                                        ( (float)z / pb.Depth - 0.5f ) * scale );
                                if ( val > vcut )
                                    val = vcut;

                                ColorEx col = new ColorEx( ( 1.0f - ( val * vscale ) ) * 0.7f, (float)x / pb.Width, (float)y / pb.Height, (float)z / pb.Depth );
                                IntPtr vale = new IntPtr(pbptr + x );
                                PixelConverter.PackColor( col, PixelFormat.A8R8G8B8, vale );
                            }
                        }
                        pbptr += pb.RowPitch;
                    }
                    pbptr += pb.SliceSkip;
                }
                buffer.Unlock();
            }
        }