File:Pseudo Kleinian 29072019 002 8K HQ.jpg

Original file(8,000 × 4,500 pixels, file size: 31.62 MB, MIME type: image/jpeg)

Summary

Description
Deutsch: Bild im Detail eines Pseudo Kleinian-Fraktals mittels genauem Raytracing.

Formel:

void PseudoKleinianIteration(CVector4 &z, const sFractal *fractal, sExtendedAux &aux) {

 // sphere inversion slot#1 iter == 0 added v2.17
 if (fractal->transformCommon.sphereInversionEnabledFalse)
 {
   if (aux.i < 1)
   {
     double rr = 1.0;
     z += fractal->transformCommon.offset000;
     rr = z.Dot(z);
     z *= fractal->transformCommon.maxR2d1 / rr;
     z += fractal->transformCommon.additionConstantA000 - fractal->transformCommon.offset000;
     // double r = sqrt(rr);
     aux.DE = aux.DE * (fractal->transformCommon.maxR2d1 / rr) + fractal->analyticDE.offset0;
   }
 }
 CVector4 gap = fractal->transformCommon.constantMultiplier000;
 double t;
 double dot1;
 // prism shape
 if (fractal->transformCommon.functionEnabledPFalse
     && aux.i >= fractal->transformCommon.startIterationsP
     && aux.i < fractal->transformCommon.stopIterationsP1)
 {
   z.y = fabs(z.y);
   z.z = fabs(z.z);
   dot1 = (z.x * -SQRT_3_4 + z.y * 0.5) * fractal->transformCommon.scale;
   t = max(0.0, dot1);
   z.x -= t * -SQRT_3;
   z.y = fabs(z.y - t);
   if (z.y > z.z) swap(z.y, z.z);
   z -= gap * CVector4(SQRT_3_4, 1.5, 1.5, 0.0);
   // z was pos, now some points neg (ie neg shift)
   if (z.z > z.x) swap(z.z, z.x);
   if (z.x > 0.0)
   {
     z.y = max(0.0, z.y);
     z.z = max(0.0, z.z);
   }
 }
 // box fold abs() tglad fold added v2.17
 if (fractal->transformCommon.functionEnabledByFalse
     && aux.i >= fractal->transformCommon.startIterationsE
     && aux.i < fractal->transformCommon.stopIterationsE)
 {
   z.x = fabs(z.x + fractal->transformCommon.additionConstant111.x)
         - fabs(z.x - fractal->transformCommon.additionConstant111.x) - z.x;
   z.y = fabs(z.y + fractal->transformCommon.additionConstant111.y)
         - fabs(z.y - fractal->transformCommon.additionConstant111.y) - z.y;
   if (fractal->transformCommon.functionEnabledBy)
   {
     z.z = fabs(z.z + fractal->transformCommon.additionConstant111.z)
           - fabs(z.z - fractal->transformCommon.additionConstant111.z) - z.z;
   }
 }
 // box fold
 if (fractal->transformCommon.functionEnabledBxFalse
     && aux.i >= fractal->transformCommon.startIterationsA
     && aux.i < fractal->transformCommon.stopIterationsA)
 {
   if (fabs(z.x) > fractal->mandelbox.foldingLimit)
   {
     z.x = sign(z.x) * fractal->mandelbox.foldingValue - z.x;
     aux.color += fractal->mandelbox.color.factor.x;
   }
   if (fabs(z.y) > fractal->mandelbox.foldingLimit)
   {
     z.y = sign(z.y) * fractal->mandelbox.foldingValue - z.y;
     aux.color += fractal->mandelbox.color.factor.y;
   }
   double zLimit = fractal->mandelbox.foldingLimit * fractal->transformCommon.scale1;
   double zValue = fractal->mandelbox.foldingValue * fractal->transformCommon.scale1;
   if (fabs(z.z) > zLimit)
   {
     z.z = sign(z.z) * zValue - z.z;
     aux.color += fractal->mandelbox.color.factor.z;
   }
 }
 // PseudoKleinian
 CVector4 cSize = fractal->transformCommon.additionConstant0777;
 CVector4 tempZ = z; //  correct c++ version.
 if (z.x > cSize.x) tempZ.x = cSize.x;
 if (z.x < -cSize.x) tempZ.x = -cSize.x;
 if (z.y > cSize.y) tempZ.y = cSize.y;
 if (z.y < -cSize.y) tempZ.y = -cSize.y;
 if (z.z > cSize.z) tempZ.z = cSize.z;
 if (z.z < -cSize.z) tempZ.z = -cSize.z;
 z = tempZ * 2.0 - z;
 double k = max(fractal->transformCommon.minR05 / z.Dot(z), 1.0);
 z *= k;
 aux.DE *= k + fractal->analyticDE.tweak005;
 // rotation
 if (fractal->transformCommon.functionEnabledRFalse
     && aux.i >= fractal->transformCommon.startIterationsR
     && aux.i < fractal->transformCommon.stopIterationsR)
   z = fractal->transformCommon.rotationMatrix.RotateVector(z);
 // offset
 z += fractal->transformCommon.additionConstant000;
aux.pseudoKleinianDE = fractal->analyticDE.scale1;
English: Detailed image of a Pseudo Kleinian fractal with exact raytracing.

Formula:

void PseudoKleinianIteration(CVector4 &z, const sFractal *fractal, sExtendedAux &aux) {

 // sphere inversion slot#1 iter == 0 added v2.17
 if (fractal->transformCommon.sphereInversionEnabledFalse)
 {
   if (aux.i < 1)
   {
     double rr = 1.0;
     z += fractal->transformCommon.offset000;
     rr = z.Dot(z);
     z *= fractal->transformCommon.maxR2d1 / rr;
     z += fractal->transformCommon.additionConstantA000 - fractal->transformCommon.offset000;
     // double r = sqrt(rr);
     aux.DE = aux.DE * (fractal->transformCommon.maxR2d1 / rr) + fractal->analyticDE.offset0;
   }
 }
 CVector4 gap = fractal->transformCommon.constantMultiplier000;
 double t;
 double dot1;
 // prism shape
 if (fractal->transformCommon.functionEnabledPFalse
     && aux.i >= fractal->transformCommon.startIterationsP
     && aux.i < fractal->transformCommon.stopIterationsP1)
 {
   z.y = fabs(z.y);
   z.z = fabs(z.z);
   dot1 = (z.x * -SQRT_3_4 + z.y * 0.5) * fractal->transformCommon.scale;
   t = max(0.0, dot1);
   z.x -= t * -SQRT_3;
   z.y = fabs(z.y - t);
   if (z.y > z.z) swap(z.y, z.z);
   z -= gap * CVector4(SQRT_3_4, 1.5, 1.5, 0.0);
   // z was pos, now some points neg (ie neg shift)
   if (z.z > z.x) swap(z.z, z.x);
   if (z.x > 0.0)
   {
     z.y = max(0.0, z.y);
     z.z = max(0.0, z.z);
   }
 }
 // box fold abs() tglad fold added v2.17
 if (fractal->transformCommon.functionEnabledByFalse
     && aux.i >= fractal->transformCommon.startIterationsE
     && aux.i < fractal->transformCommon.stopIterationsE)
 {
   z.x = fabs(z.x + fractal->transformCommon.additionConstant111.x)
         - fabs(z.x - fractal->transformCommon.additionConstant111.x) - z.x;
   z.y = fabs(z.y + fractal->transformCommon.additionConstant111.y)
         - fabs(z.y - fractal->transformCommon.additionConstant111.y) - z.y;
   if (fractal->transformCommon.functionEnabledBy)
   {
     z.z = fabs(z.z + fractal->transformCommon.additionConstant111.z)
           - fabs(z.z - fractal->transformCommon.additionConstant111.z) - z.z;
   }
 }
 // box fold
 if (fractal->transformCommon.functionEnabledBxFalse
     && aux.i >= fractal->transformCommon.startIterationsA
     && aux.i < fractal->transformCommon.stopIterationsA)
 {
   if (fabs(z.x) > fractal->mandelbox.foldingLimit)
   {
     z.x = sign(z.x) * fractal->mandelbox.foldingValue - z.x;
     aux.color += fractal->mandelbox.color.factor.x;
   }
   if (fabs(z.y) > fractal->mandelbox.foldingLimit)
   {
     z.y = sign(z.y) * fractal->mandelbox.foldingValue - z.y;
     aux.color += fractal->mandelbox.color.factor.y;
   }
   double zLimit = fractal->mandelbox.foldingLimit * fractal->transformCommon.scale1;
   double zValue = fractal->mandelbox.foldingValue * fractal->transformCommon.scale1;
   if (fabs(z.z) > zLimit)
   {
     z.z = sign(z.z) * zValue - z.z;
     aux.color += fractal->mandelbox.color.factor.z;
   }
 }
 // PseudoKleinian
 CVector4 cSize = fractal->transformCommon.additionConstant0777;
 CVector4 tempZ = z; //  correct c++ version.
 if (z.x > cSize.x) tempZ.x = cSize.x;
 if (z.x < -cSize.x) tempZ.x = -cSize.x;
 if (z.y > cSize.y) tempZ.y = cSize.y;
 if (z.y < -cSize.y) tempZ.y = -cSize.y;
 if (z.z > cSize.z) tempZ.z = cSize.z;
 if (z.z < -cSize.z) tempZ.z = -cSize.z;
 z = tempZ * 2.0 - z;
 double k = max(fractal->transformCommon.minR05 / z.Dot(z), 1.0);
 z *= k;
 aux.DE *= k + fractal->analyticDE.tweak005;
 // rotation
 if (fractal->transformCommon.functionEnabledRFalse
     && aux.i >= fractal->transformCommon.startIterationsR
     && aux.i < fractal->transformCommon.stopIterationsR)
   z = fractal->transformCommon.rotationMatrix.RotateVector(z);
 // offset
 z += fractal->transformCommon.additionConstant000;
aux.pseudoKleinianDE = fractal->analyticDE.scale1;
}
Date
Source Own work
Author PantheraLeo1359531

CGI.

Licensing

I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

This image has been assessed using the Quality image guidelines and is considered a Quality image.

العربية  جازايرية  беларуская  беларуская (тарашкевіца)  български  বাংলা  català  čeština  Cymraeg  Deutsch  Schweizer Hochdeutsch  Zazaki  Ελληνικά  English  Esperanto  español  eesti  euskara  فارسی  suomi  français  galego  עברית  हिन्दी  hrvatski  magyar  հայերեն  Bahasa Indonesia  italiano  日本語  Jawa  ქართული  한국어  kurdî  Lëtzebuergesch  lietuvių  македонски  മലയാളം  मराठी  Bahasa Melayu  Nederlands  Norfuk / Pitkern  polski  português  português do Brasil  rumantsch  română  русский  sicilianu  slovenčina  slovenščina  shqip  српски / srpski  svenska  தமிழ்  తెలుగు  ไทย  Tagalog  Türkçe  toki pona  українська  vèneto  Tiếng Việt  中文  中文(简体)  中文(繁體)  +/−

Captions

Pseudo Keinian fractal created with mandelbulber2

Items portrayed in this file

depicts

29 July 2019

image/jpeg

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current07:56, 30 July 2019Thumbnail for version as of 07:56, 30 July 20198,000 × 4,500 (31.62 MB)PantheraLeo1359531User created page with UploadWizard

The following page uses this file:

Global file usage

The following other wikis use this file:

Metadata