You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文本模式绘制函数坐标图:镜像显示及公式修改无显示问题求助

问题修复方案

问题根源

  1. 图像镜像:当前代码中graphLine[9 - h] = '*'的索引计算导致y值与横向位置反向,y越大*越靠左,呈现镜像效果。
  2. 加负号后无图像:修改y的计算式后,y+1的范围变为1~2,乘以10后h≥10,超出h < 10的判断条件,因此无法绘制*。

修复步骤

  1. 修正图像方向:将PrintGraph方法中的索引计算从9 - h改为h,让y值越大(h越大),*越靠右,符合常规坐标逻辑。
  2. 处理边界值:通过归一化+范围限制,确保h始终落在0~9的有效索引区间,避免边界值无法绘制的问题。
  3. 优化通用性:引入minY和maxY统一处理y值映射,适配不同函数的取值范围,提升代码复用性。

修改后的完整代码

using System;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        double x, y; 

        Console.WriteLine("|   x   |   y   |");

        // 当前函数的y值范围是-1到0
        double maxY = 0;
        double minY = -1;

        for (x = 0; x <= 4; x += 0.20)
        {
            if (x < 2)
            {
                y = Math.Sqrt(1 - Math.Pow(x - 1, 2)) - 1;
            }
            else
            {
                y = -0.5 * Math.Sqrt(1 - Math.Pow(x - 3, 2));
            }

            Console.Write($"| {x,5:F2} | {y,5:F2} |");

            PrintGraph(minY, maxY, y);

            Console.WriteLine();
        } 

        Console.ReadLine();
    }  

    static void PrintGraph(double minY, double maxY, double y)
    {
        StringBuilder graphLine = new StringBuilder("          ");  
        // 归一化y值到0~9的索引范围
        int h = (int)((y - minY) / (maxY - minY) * 9);
        // 强制限制h在有效索引区间内
        h = Math.Clamp(h, 0, 9);

        graphLine[h] = '*'; 

        Console.Write(graphLine);
    }
}

代码说明

  • 用minY和maxY做归一化计算,替代原有的y+1,适配任意函数的y值范围,避免硬编码导致的适配问题。
  • Math.Clamp确保h不会超出0~9的有效索引区间,解决y取边界值时无法绘制*的问题。
  • 索引改为h后,y值越大*越靠右,图像方向与预期完全一致。

内容的提问来源于stack exchange,提问作者Vivilonchello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:58