绘制 Mandelbrot 集

Drawing a Mandelbrot Set

我正在尝试实现 Mandelbrot 集的功能,但我不确定自己做错了什么或做对了,代码如下:

private void StartCircles()
{
    float savePower = BlackCircle.anchoredPosition.x;
    GameObject[] AllCircles = new GameObject[itarations];
    AllCircles[0] = BlackCircle.gameObject;
    for (int i = 1; i < itarations; i++)
    {
        GameObject Circle = Instantiate(BlackCircle.gameObject, Vector3.zero, Quaternion.identity);
        Circle.transform.SetParent(CanvasPerent);
        savePower = Mathf.Pow(savePower, 2);
        savePower += RedCircle.anchoredPosition.x;
        Circle.GetComponent<RectTransform>().anchoredPosition = new Vector2(savePower,
            AllCircles[i - 1].GetComponent<RectTransform>().anchoredPosition.y * -1);
        AllCircles[i] = Circle;
    }
    CleanSqud = new GameObject[itarations];
    CleanSqud = AllCircles;
}

我不确定 y 位置应该是什么,x 位置怎么可能 < 0 如果它是 2 的幂,它会自动 > 0。

显示如下:

我设法让我的代码在一段时间后工作,如果有人遇到我的问题,我会分享一些答案:

好吧,我只想实现 zn + 1 = zn * zn + c 的功能 我没有做全套只有这个功能,这是我的代码:

    #region Actions
private void OnDestroy()
{
    MoveBlack.HasMoved -= HasMoved;
    MoveBlack.HasStoped -= HasStoped;

    MoveRed.HasMoved -= HasMoved;
    MoveRed.HasStoped -= HasStoped;
}
private void LateUpdate()
{
    if (moved) { updateCircles(); }
    if (hasparty)
    {
        foreach(GameObject game in CleanSqud)
        {
            game.GetComponent<Image>().color = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
        }
    }
}
private void HasMoved()
{
    moved = true;
}

private void HasStoped()
{
    moved = false;
}


#endregion

#region Updateing
private void updateCircles()
{
    foreach (GameObject Circle in CleanSqud) { if (Circle.gameObject.name != "BlackCirlce") { Destroy(Circle); } }
    StartCircles();
}


private void StartCircles()
{


    float x = BlackCircle.anchoredPosition.x;
    float y = BlackCircle.anchoredPosition.y;
    GameObject[] AllCircles = new GameObject[itarations];
    AllCircles[0] = BlackCircle.gameObject;
    for (int i = 1; i < itarations; i++)
    {

        GameObject Circle = Instantiate(BlackCircle.gameObject, Vector3.zero, Quaternion.identity);
        Circle.transform.SetParent(CanvasPerent);
        AllCircles[i] = Circle;

        x = Mathf.Pow(x, 2);
        x -= Mathf.Pow(AllCircles[i - 1].GetComponent<RectTransform>().anchoredPosition.y, 2);
        x += RedCircle.anchoredPosition.x;

        y = (2 * AllCircles[i - 1].GetComponent<RectTransform>().anchoredPosition.x
            * AllCircles[i - 1].GetComponent<RectTransform>().anchoredPosition.y) + RedCircle.anchoredPosition.y;

        Circle.GetComponent<RectTransform>().anchoredPosition = new Vector2(x, y);





    }
    CleanSqud = new GameObject[itarations];
    CleanSqud = AllCircles;
}
#endregion

因此,您应该做的是将 y 显示为虚数,将 x 显示为实数,使用等式显示它: 这个 x = 旧 x 的幂 - 旧 y 的幂 + c.x 这个 y = 2 * 旧的 x * 旧的 y + c.y

这应该有效! 谢谢。