Графическа библиотека на С#?

241
18 января 2022, 14:50


Вот на хабре наткнулся на C# код, но ни как не пойму что это за библиотека (если это вообще библиотека).
В общем, подскажите пожалуйста как мне скомпилировать и запустить сследующий код?

static XBitmap PlotJuliaSet(ComplexNumber c, int w, int h, int maxIter,
    double xMin = Double.NaN, double yMin = Double.NaN, double xMax = Double.NaN, double yMax = Double.NaN)
{
    double r = CalculateR(c);
    if (Double.IsNaN(xMin) || Double.IsNaN(xMax) || Double.IsNaN(yMin) || Double.IsNaN(yMax))
    {
        xMin = -r;
        yMin = -r;
        xMax = r;
        yMax = r;
    }            
    Logger.Instance.Log("R = " + r);
    double xStep = Math.Abs(xMax - xMin) / w;
    double yStep = Math.Abs(yMax - yMin) / h;
    XBitmap bmp = new XBitmap(w, h);
    IDictionary<int, IDictionary<int, int>> xyIdx = new Dictionary<int, IDictionary<int, int>>();
    int maxIdx = 0;
    for (int i = 0; i < w; i++)
    {
        xyIdx.Add(i, new Dictionary<int, int>());
        for (int j = 0; j < h; j++)
        {
            double x = xMin + i * xStep;
            double y = yMin + j * yStep;
            ComplexNumber z = new ComplexNumber(x, y);
            IList<ComplexNumber> zIter = SqPolyIteration(z, c, maxIter, r);
            int idx = zIter.Count - 1;
            if (maxIdx < idx)
            {
                maxIdx = idx;
            }
            xyIdx[i].Add(j, idx);
        }
    }
    for (int i = 0; i < w; i++)
    {
        for (int j = 0; j < h; j++)
        {
            int idx = xyIdx[i][j];
            double x = xMin + i * xStep;
            double y = yMin + j * yStep;
            ComplexNumber z = new ComplexNumber(x, y);
            bmp.SetPixel(w - i - 1, j, ComplexHeatMap(idx, 0, maxIdx, z, r));
        }
    }
    return bmp;
}
private static IList<ComplexNumber> SqPolyIteration(ComplexNumber z0, ComplexNumber c, int n, double r = 0)
{
    IList<ComplexNumber> res = new List<ComplexNumber>();
    res.Add(z0);
    for (int i = 0; i < n; i++)
    {
        if (r > 0)
        {
            if (res.Last().Mod > r)
            {
                break;
            }
        }
        res.Add(res.Last() * res.Last() + c);
    }
    return res;
}
private static double CalculateR(ComplexNumber c)
{
    return (1 + Math.Sqrt(1 + 4*c.Mod))/2;
}
public static Color ComplexHeatMap(decimal value, decimal min, decimal max, ComplexNumber z, double r)
{
    decimal val = (value - min) / (max - min);
    return Color.FromArgb(
        255,
        Convert.ToByte(255 * val),
        Convert.ToByte(255 * (1 - val)),
        Convert.ToByte(255 * (z.Mod / r > 1 ? 1 : z.Mod / r))
    );
}

Заранее спасибо!

Answer 1

Это никакая не библиотека.

У вас у функции PlotJuliaSet тип результата - картинка bmp.

Вы ее можете сохранить и посмотреть любым просмотровщиком.

Собственно в примере приведен не весь код, а смысловая часть. Запустите вашу любимую IDE для C#, создайте пустой проект. Добавьте данный код.

Пример сохранения bmp

XBitmap JuliaImage=PlotJuliaSet(<параметры>)
SaveFileDialog dialog = new SaveFileDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
   int width = Convert.ToInt32(JuliaImage.Width); 
   int height = Convert.ToInt32(JuliaImage.Height); 
   Bitmap bmp = new Bitmap(width,height);        
   drawImage.DrawToBitmap(bmp, new Rectangle(0, 0, width, height);
   bmp.Save(dialog.FileName, ImageFormat.Jpeg);
}

Автор использует собственные классы, которые не привел в коде. Для того чтобы все заработало нужно создать класс ComplexNumber)

Xbitmap и Color это стандартные классы, нужно подключить пространства имен

using System.Drawing;
using System.Collections;

Если вы используете MS Visual Studio, то она сама подскажет, что подставить)

Также вы можете использовать одно из готовых решений с github

READ ALSO
Прибавить 10 дней к дате

Прибавить 10 дней к дате

Допустим, есть такая дата: 2412

59
вывести два json массива в одном ajax

вывести два json массива в одном ajax

есть два разные массива по значениям и количеству содержания

161
переход с php 5.3 на php 7.4 preg_replace

переход с php 5.3 на php 7.4 preg_replace

Вообщем перестал грабить с обновлением php до последней версии старый код работал

85
Как убрать относительные пути в коде?

Как убрать относительные пути в коде?

Есть dom-дерево файла htmlВ файле прописаны относительные пути к файлам стилей, картинкам, скриптам, например:

133