| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖, 1 人收藏
标题:求解 查了一天书也没明白
只看楼主 加入收藏
warmaps
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-6-8
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:11 
求解 查了一天书也没明白
程序代码:
#include<stdio.h>
int main() {
    float a,x,y,f;
    for(y=1.5f;y>=-1.5f;y=y-0.1f)  {
        for(x=-1.5f;x<=1.5f;x=x+0.05f)  {
            a=x*x+y*y-1;
            f=a*a*a-x*x*y*y*y;
            putchar(f<=0.0f?".:-=+*#%@"[(int)(-8*f)]:' ');
        }
        putchar('\n');
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册

就这个程序   程序用了  心形曲线     水平集方法
问题有
1
putchar(f<=0.0f?".:-=+*#%@"[(int)(-8*f)]:' ');
这串代码做了些什么   望详解 本人刚刚接触c
2【(Int)(-8*f)]这是指针的用法吗?   如果是,书上的指针声明形式不是这样呀!一般形式   基类型*指针变量
2015-06-09 16:25
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
putchar(f<=0.0f?".:-=+*#%@"[(int)(-8*f)]:' ');
是输出一个字符
".:-=+*#%@"[(int)(-8*f)]可以看成是从字符串中取某个字符,字符编号是(int)(-8*f)
至于y,x,a,f的取值及计算还需考虑。

大开眼界
2015-06-09 16:58
warmaps
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-6-8
收藏
得分:0 
回复 2楼 lianyicq
我也能想明白   主要是它怎么办到的    可能是我表述不清吧
2015-06-09 17:05
幻想乡流浪者
Rank: 2
来 自:种花家
等 级:论坛游民
帖 子:27
专家分:21
注 册:2015-6-6
收藏
得分:0 
putchar(f<=0.0f?".:-=+*#%@"[(int)(-8*f)]:' ');
我是这样想的,一个选择。
2015-06-09 17:45
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
为什么这个表达式能根变量f的值不同而输出字符串中的其中一个??
f的范围是多少??
".:-=+*#%@"[(int)(-8*f)]

人有多懒,编程就有多难。
2015-06-09 18:00
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
数学之美

关于楼主的问题,提示
1 ? 2 : 3
"test"[2]


莫问前尘有愧,但求今生无悔
2015-06-10 08:36
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:20 
原来字符串常量还可以这样用
程序代码:
#include<stdio.h>
int main() 
{
    
    putchar(".:-=+*#%@"[0]);
    putchar(".:-=+*#%@"[1]);
    putchar(".:-=+*#%@"[2]);
    putchar(".:-=+*#%@"[3]);
    putchar(".:-=+*#%@"[4]);
    putchar(".:-=+*#%@"[5]);
    putchar(".:-=+*#%@"[6]);
    putchar(".:-=+*#%@"[7]);
    putchar(".:-=+*#%@"[8]);
    putchar('\n');

    return 0;
}

人有多懒,编程就有多难。
2015-06-10 09:16
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 3楼 warmaps
    纯熟个人短时间理解,分析相当不完全,抛砖引玉,欢迎指正。
    这个代码很巧妙,从编程来说,结构清淅,代码简单,实现的输出图形很有意思。
    编程方面,变量f在代码中仅仅起到一个比例的作用,具体数值大小是相对的。唯一要求是f不为零。对于外层y循环,也就是屏幕输出的纵坐标,得到(1.5+1.5)/0.1+2=32个点。内循环x,屏幕输出的横坐标,得到(1.5+1.5)/0.05+2=62个点。然后根据每个坐标点做出计算,根据结果得到当前(x,y)点的显示的字符。因为对c了解很贫泛,不知0.0f是何意,不过换成0也能得到原输出图形。Putchar中的代码也很够意思,唯一的三目运算符也有返回值。但感觉重点还是在计算方面。
    没有搞图像处理,水平集这个概念不了解。以前只知道把高维问题降维处理,比如智能计算的时候简化知识要降维,另外学自动控制可能知道,非线性系统的相平面分析法,就是这样。而水平集是把低维问题升维,比如平面圆方程,将标准单位圆方程右边的1移到左边,左边写成z。就成了三维曲面方程,利用不同x,y对应的z值就可以实现代码中取得不同的字符输出,这也是相当有规律可循的。看代码输出的图形也可以看出字符的选择实际上是根据计算点离中心的位置来定的。
    a值计算,为了贴近记忆,当作z1。如果高数没有还给学校,应该知道这个表达式表示的是怎样一个二次曲面S1,计算结果相当于S1曲面的z坐标,这个容易理解。f值计算,感觉比较迷惑,但还是有思路,可以看成是两个曲面S2和S3的z坐标求差。减号之前是z1的三次方,在三维坐标系中,这z1的三次方比较关键,变化很明显,形成一个尖头向下的漏头形,不过漏斗边界一般是下凹的,它是上凸的。如果有matlab可以试着画画,此曲面计为S2。减号右边代表的S3曲面也抽象,但想象对于某一x或y值作yoz或yox平面的投影,可以看出曲面随x或y值变化的大概情形,有条件也可试着画画。
    能写出这个代码所下的功夫在编程之个,一般情况没必要纠结这个问题。
...
自己弥补,发现"远"字不正确。

[ 本帖最后由 lianyicq 于 2015-6-10 14:15 编辑 ]

大开眼界
2015-06-10 10:00
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 

构思出这个代码,实在妙!

能编个毛线衣吗?
2015-06-10 10:31
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
赞同,构思出来非比寻常

Maybe
2015-06-10 12:37
快速回复:求解 查了一天书也没明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017544 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved