请大神们进来指点一下

weixin_40757263 2019-01-25 11:10:40

最近在学习C#,又赶上佩奇那么火,偶尔看到一大神用c画的佩奇,想将代码改成C#的,但是这一句没有看懂,望大神们指点一下,谢谢!
...全文
1049 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43647722 2019-01-28
  • 打赏
  • 举报
回复
666666666666
weixin_44624417 2019-01-27
  • 打赏
  • 举报
回复
这个小程序不错,可以有虽然看不懂
mu3380 2019-01-27
  • 打赏
  • 举报
回复
这个小程序不错,可以有虽然看不懂
이보 2019-01-27
  • 打赏
  • 举报
回复
下载需要的金币是不是只能充值啊?
qq_26702469 2019-01-27
  • 打赏
  • 举报
回复
66666666666666666666666
货郎大叔 2019-01-26
  • 打赏
  • 举报
回复
图片看的不是很清楚
xuzuning 2019-01-26
  • 打赏
  • 举报
回复
哪里??? putchar c语言函数之一,作用是向终端输出一个字符。其格式为putchar(c),其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是事先用char定义好的一个字符型变量。
weixin_40757263 2019-01-26
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
int main(int a ,char**b)
是 C 程序的入口函数
对应 C# 的
static void Main(string[] args)

char** 是字符指针的指针,相当于 C# 的 string[]

请问putchar中的【double a,double b】代表的是什么意思?
cslufi 2019-01-26
  • 打赏
  • 举报
回复
好久没看这个了
weixin_40757263 2019-01-26
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:

谢谢!!!!
有心了,老哥!
xuzuning 2019-01-26
  • 打赏
  • 举报
回复
xuzuning 2019-01-26
  • 打赏
  • 举报
回复
是的,".|/=\\|/=\\|@!"[(int)a] 表示第几个字符
xuzuning 2019-01-26
  • 打赏
  • 举报
回复
帮你移植了一下
namespace 佩奇
{
    class Program
    {
        static void Main(string[] args)
        {
            //https://cloud.tencent.com/developer/news/233009
            //https://www.cnblogs.com/yezibiancheng/p/9426658.html
            //http://www.cnblogs.com/momoowo/archive/2018/06/17/9192488.html
            for (double y = -1; y < 1; y += 0.05, putchar('\n'))
                for (double x = -1; x < 1; x += 0.05)
                    putchar(outline(x, y));
            var s = 1.0;
            for (double y = -1; y < 0.6; y += 0.05 / s, putchar('\n'))
                for (double x = -1; x < 0.6; x += 0.025 / s)
                    putchar(" .|/=\\|/-\\|@! "[(char)f(u(x, y, 0.3), v(x, y, 0.3))]);
        }
        
        static double f0(double x, double y)
        {
            return Math.Sqrt(x * x + y * y) - 0.8;
        }
        static char outline(double x, double y)
        {
            var delta = 0.001;
            if(Math.Abs(f0(x,y))<0.05)
            {
                var dx = f0(x+delta,y)-f0(x-delta,y);
                var dy=f0(x+y+delta,y)-f0(x,y-delta);
                return "|/=\\|/=\\|"[(int)((Math.Atan2(dy,dx)/(2*Math.PI)+0.5)*8+0.5)];
            }
            else if(f0(x,y)<0) return '.';
            else return ' ';        
        }
        static void putchar(char c)
        {
            Console.Write(c);
        }
        static double c(double x, double y, double r) //基本图形
        {
            return Math.Sqrt(x * x + y * y) - r;
        }
        static double u(double x, double y, double t) //旋转 t°的 x
        {
            return x * Math.Cos(t) + y * Math.Sin(t);
        }
        static double v(double x, double y, double t) //旋转 t°的 y
        {
            return y * Math.Cos(t) - x * Math.Sin(t);
        }
        static double fa(double x, double y) //脸
        {
            return Math.Min(c(x, y, 0.5), c(x * 0.47 + 0.15, y + 0.25, 0.3));
        }
        static double no(double x, double y) //鼻子
        {
            return c(x * 1.2 + 0.97, y + 0.25, 0.2);
        }
        static double nh(double x, double y) //鼻孔
        {
            return Math.Min(c(x + 0.9, y + 0.25, 0.03), c(x + 0.75, y + 0.25, 0.03));
        }
        static double ea(double x, double y) //耳朵
        {
            return Math.Min(c(x * 1.7 + 0.3, y + 0.7, 0.15), c(u(x, y, 0.25) * 1.7, v(x, y, 0.25) + 0.65, 0.15));
        }
        static double ey(double x, double y) //眼睛
        {
            return Math.Min(c(x + 0.4, y + 0.35, 0.1), c(x + 0.15, y + 0.35, 0.1));
        }
        static double pu(double x, double y) //眼珠
        {
            return Math.Min(c(x + 0.38, y + 0.33, 0.03), c(x + 0.13, y + 0.33, 0.03));
        }
        static double fr(double x, double y) //腮红
        {
            return c(x * 1.1 - 0.3, y + 0.1, 0.15);
        }
        static double mo(double x, double y) //嘴巴
        {
            return Math.Max(c(x + 0.15, y - 0.05, 0.2), -c(x + 0.15, y, 0.25));
        }
        static double o(double x, double y, Func<double, double, double> f, double i) //判断是否为边界,并计算角度
        {
            var r=f(x,y);
            return Math.Abs(r) < 0.02 ? Math.Atan2(f(x, y + 1e-3) - r, f(x - 1e-3, y) + 0.3) * 1.273 + 6.5 :( r < 0 ? i : 0);
        }
        static double s(double x, double y, Func<double, double, double> f, double i) //计算是否是内部
        {
            return f(x, y) < 0 ? i : 0;
        }
        static double f(double x, double y) //计算 SDF
        {
            if (o(x, y, no, 1) > 0)
                return Math.Max(o(x, y, no, 1), s(x, y, nh, 12));
            else
                return Math.Max(o(x, y, fa, 1), Math.Max(o(x, y, ey, 11), Math.Max(o(x, y, ea, 1), Math.Max(o(x, y, no, 1), Math.Max(s(x, y, fr, 13), s(x, y, pu, 12))))));
        }
    }
}
weixin_40757263 2019-01-26
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
哪里???

putchar
c语言函数之一,作用是向终端输出一个字符。其格式为putchar(c),其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是事先用char定义好的一个字符型变量。

就是这句话
putchar(".|/=\\|/=\\|@!"[(int)a]);

putchar我清楚是输出字符的意思,但是后面中括号中有一个整数表示什么意思?前面的".|/=\\|/=\\|@!"就只是表示一串字符串吗?
xuzuning 2019-01-25
  • 打赏
  • 举报
回复
一个二重循环,有什么可不懂的? 就算有不懂的地方,你也应该指出来
SoulRed 2019-01-25
  • 打赏
  • 举报
回复
那你也不能画一个代码给我们看啊。
你应该问美术方面的同志看看你画的怎么样
weixin_40757263 2019-01-25
  • 打赏
  • 举报
回复
先自己顶一下
xuzuning 2019-01-25
  • 打赏
  • 举报
回复
int main(int a ,char**b) 是 C 程序的入口函数 对应 C# 的 static void Main(string[] args) char** 是字符指针的指针,相当于 C# 的 string[]
weixin_40757263 2019-01-25
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
一个二重循环,有什么可不懂的?
就算有不懂的地方,你也应该指出来

1.主程序中int main(int a ,char**b)//这个我就理解为a是用户可以设置的值**b是什么意思呢?
2.外层的循环中可不可以理解为C#中的(但是b参数不清楚是什么意思)
for (double y=-1; y < 0.6; y += 0.05/a)
{
Console.WriteLine();
}

3.内层循环中的putchar就完全懵逼了···只知道那句话中的\\是用来画边缘的,C#中应该如何实现

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧