|
作者: 286 [unique] 版主 | 登录 |
如果不包括图形设置初始化,变量声明等与画图无关的语句,上图由一条编程语句生成.呵呵,试试? #include <graphics.h> #include <math.h> #define PI 3.1415926 void main() { int radius,x,y; float i; int GraphDriver=DETECT,GraphMode; initgraph(&GraphDriver,&GraphMode,""); cleardevice(); setcolor(WHITE); /*以上语句为图形初始化及清屏语句*/ /*下面一句即是(呵呵,别说不是一条语句噢) ;) */ for (radius=30;radius<=150;radius+=20) for (i=0;i<=PI*2;i+=PI/8) circle(sin(i)*radius+300,cos(i)*radius+210,60); /*下面是用户按任意键退出及关闭图形模式*/ getch(); closegraph(); } [此贴被 286(unique) 在 09月24日09时50分 编辑过] ------------------------------------------------------------- 以下为新版本. :) #include <graphics.h> #include <math.h> #include <stdlib.h> #define PI 3.1415926 void main() { int radius,circles,colors,j; float i; char ch; int GraphDriver=DETECT,GraphMode; initgraph(&GraphDriver,&GraphMode,""); randomize(); for (;;) { cleardevice(); colors=random(15)+1; setcolor(colors); /*以上语句为图形初始化及清屏语句*/ /*下面一句即是(呵呵,别说不是一条语句噢) ;) */ radius=random(100); for (circles=30;circles<=150;circles+=20) for (i=0;i<=PI*2;i+=PI/8) circle(sin(i)*circles+300,cos(i)*circles+210,radius); /*下面是用户按任意键退出及关闭图形模式*/ outtextxy(100,450,"Quit(Yes/No)?"); ch=getche(); if (ch=='y' || ch=='Y') break; } closegraph(); } [此贴被 286(unique) 在 09月26日12时39分 编辑过] |
地主 发表时间: 09/23 09:46 |
回复: f_h [f_h] 论坛用户 | 登录 |
请指教! |
B1层 发表时间: 09/23 10:38 |
回复: jackleon [jackleon] 论坛用户 | 登录 |
过程是怎样实现的? |
B2层 发表时间: 09/23 10:59 |
回复: abctm [abctm] 版主 | 登录 |
什么语言 logo语言么? |
B3层 发表时间: 09/23 14:03 |
回复: ricky [ricky] 版主 | 登录 |
c语言,不过年代久远,不记得画圆的语句了 |
B4层 发表时间: 09/23 16:39 |
回复: 286 [unique] 版主 | 登录 |
更新首贴 |
B5层 发表时间: 09/25 12:28 |
回复: kert_t8 [kert_t8] 论坛用户 | 登录 |
我记得小的时候玩而过一种玩具,就是一把大尺子,里边有许多带齿轮的圈儿,然后把一个圆形带齿的圆片放到圈里。这个圆片的不同位置有小孔,可以把笔插进去,然后就用笔带着圆片在圈里画园,然后一圈一圈的就可以画出花朵、焰火等简单的图案,不知道原理和这个是不是一样的。 这里边的数学原理好像有点复杂哦 应该是吧,呵呵:) |
B6层 发表时间: 09/25 12:55 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
不是,是利用一个循环语句,改变圆心坐标以及半径大小来实现的 不过那个圆心坐标改变的算法实在是够绝・・・ 286,你那个变量x,y是多余的吧? 该去~~~~ |
B7层 发表时间: 09/25 16:55 |
回复: 286 [unique] 版主 | 登录 |
呵呵,原来x,y是表示坐标的,为了表现出“一条语句”,省略了。 Thanx 4 寒枫 4 ur 认真。 |
B8层 发表时间: 09/25 17:19 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
唉,其实我看错了,一看到那个radius就以为是半径,其实这个图的半径定格为60,就是说每个圆的大小是一样的,是吧?286 后来一想,如果这个半径再来个循环,可能这张图就更有艺术感了,只是可能,没去试,怕想破头脑,这循环的确都绕人的,有空弄出来的话给大家看看,争取也用一条语句,不然这程序所表现出来的东西也就没特色了 |
B9层 发表时间: 09/25 17:41 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
circle(sin(i)*radius+300,cos(i)*radius+210,60); 把上面这句里面的60改为radius,即变成变量,半径就成为了可变的了 不过for (radius=30;radius<=150;radius+=20)这里的150最好改成130 或者110(降20的倍数都可以),不然到最后那个圆太大了,将超出屏幕的范围,我个人觉得130好点,大一点有点“冲击波”的感觉,呵呵,虽然这样修改程序并不高明,但至少可以多一条思路・・・286不要告我侵犯版权哦 如果颜色不为white,那……看各位谁的审美观强了~~~~~~ |
B10层 发表时间: 09/25 17:50 |
回复: 286 [unique] 版主 | 登录 |
radius也是半径,只是不是画出的圆的半径,而是每个圆的圆心所在的"圆"的半径. 其实程序稍微一变,就会变出各种图案.只是一般很少有人愿意去作. 不是我泼大家的冷水,类似的源程序,我还有很多,而且全为原创,只是大家所感兴趣的只是看一眼,大家只是在乎有没有一个攻击程序,能入侵多少个人,至于如果编程入侵,如何更进一步,似乎没太多人关心.真正愿意投入学习的微乎其微. 所以..... 再次感谢你的认真. |
B11层 发表时间: 09/25 17:51 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
哈哈,我和286在争先恐后发帖啊,上面两张几乎同时发的,286可能你也没想到在你发之前,就在那一瞬间我又发了一张,还是我快,嘿嘿・・・ 我想20cn本来就是个学习的园地,不要只想着去攻击、入侵什么的,还是干正经事要紧,286可以把你的原创的源程序发点枫弟吗?(不好意思,称兄道弟了,不要嫌弃呀~~~)我想学习学习,就当是我成长扶我一把,OK? 给您添麻烦了・・・ E-mail:bug_me@163.com |
B12层 发表时间: 09/25 18:01 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
286,不要怪我罗嗦,你这句:“而是每个圆的圆心所在的"圆"的半径” 我想没几个人能理解,我觉得那个radius是确定下一个(轮)圆的圆心 所在的位置,而且既然半径定格在60了,又怎么来用变量来表达半径呢 所以你那样表达是不是应该改一下,或者解释得肤浅点呢? 不好意思~~~~~~~讨论讨论而已・・ |
B13层 发表时间: 09/25 18:10 |
回复: 286 [unique] 版主 | 登录 |
TO 寒枫: 你说的对,写radius是有点让人迷惑之处.谢谢! 一个论坛不怕讨论,更不怕争吵(我这个班主就是吵来的, :) ),怕的就是没人理,感觉就象自作多情一样. 版本已更新,见首贴. |
B14层 发表时间: 09/26 12:06 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
radius=random(100); colors=random(15)+1 太棒了!!! 极其简单的语句,却让整个视觉效果得到了新的震撼・・・ 286,还有别的程序能让我借鉴借鉴吗?bug_me.163.com 你的程序的确很精练,很有风格 佩服ing~~~~~ |
B15层 发表时间: 09/26 12:51 |
回复: gududelang [gududelang] 论坛用户 | 登录 |
什么吗?也太麻烦了谁用那么麻烦的 |
B16层 发表时间: 09/27 19:33 |
回复: ceo_8008 [ceo_8008] 论坛用户 | 登录 |
你指的麻烦是……~~~~~~~?? |
B17层 发表时间: 09/28 08:41 |
回复: Neptune [admin_20cn] 论坛用户 | 登录 |
好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好! |
B18层 发表时间: 09/28 11:55 |
回复: lwei889 [lwei889] 论坛用户 | 登录 |
我也正在学c语言,但还没有接触到图形函数,所以看的不太明白,我在机子上运行一下 ,的确很棒 |
B19层 发表时间: 09/29 14:30 |
回复: xiaoshi [xiaoshi] 论坛用户 | 登录 |
在tc2.0里有一个自带的测试显卡的.c文件,看看里面的东西,回学的东西,名字不记的了 |
B20层 发表时间: 10/03 11:17 |
回复: nuzhou [nuzhou] 论坛用户 | 登录 |
有TC2。0的压缩包吗? 有哪位同志有给个。 |
B21层 发表时间: 10/03 12:14 |
回复: collimator [collimator] 论坛用户 | 登录 |
这个好像、Q-basic中有说 |
B22层 发表时间: 10/05 01:08 |
回复: blindeaf [blindeaf] 论坛用户 | 登录 |
太酷了,不得不佩服 |
B23层 发表时间: 10/07 20:34 |
回复: honyry [honyry] 论坛用户 | 登录 |
ch=getche(); 呵呵 在学校时经常用这个语句,今天早上还想找呢! 竟在这里也能看到 |
B24层 发表时间: 10/07 20:58 |
回复: xto [xto] 论坛用户 | 登录 |
一流呀~~~~286,服你啦~ 那里有一天,我也要写出这么一流的程序,看着来吧,嘿嘿(虽然才刚学) |
B25层 发表时间: 10/08 05:08 |
回复: netcody [netcody] 论坛用户 | 登录 |
286真是用苦良心呀, 非感谢你这么细心和耐心, 在你身上又让我看到了学C的希望了, |
B26层 发表时间: 10/19 20:15 |
回复: xiaoshi [xiaoshi] 论坛用户 | 登录 |
tc中测试显卡程序:: 略。 [因为该源程序是TC自带,用户可以直接从TC系统中找到。] [此贴被 286(unique) 在 10月21日17时02分 编辑过] |
B27层 发表时间: 10/20 17:17 |
回复: xjingbin0 [xjingbin0] 论坛用户 | 登录 |
呃编译运行后为何出现如下情况。 |
B28层 发表时间: 04-09-03 08:21 |
回复: xjingbin0 [xjingbin0] 论坛用户 | 登录 |
呃编译运行了以后为何出现如下情况。 |
B29层 发表时间: 04-09-03 08:22 |
回复: 286 [unique] 版主 | 登录 |
http://www.20cn.org/~unique/Download/index.htm#优秀程序精选 下载一个egavga.bgi,并放到可执行文件相同的目录下。 |
B30层 发表时间: 04-09-03 10:05 |
回复: windflower [windflower] 论坛用户 | 登录 |
好,很好,好得很。 |
B31层 发表时间: 04-09-04 18:38 |
回复: jiese [jiese] 论坛用户 | 登录 |
我的TC中不能出现中文是什么原因?能不能告诉我解救的法子呢 |
B32层 发表时间: 04-09-12 18:36 |
回复: superwww [superwww] 论坛用户 | 登录 |
计算机图形学啊 |
B33层 发表时间: 04-09-15 22:47 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
圆心的算法确实牛。不过我想了把半天也未能把每次循环的圆心的大概位置确定。(故后面用一个程序来画出圆心的位置) 第一个for语句须执行(150-30)/20+1=7次,而每次执行时下面的第二个for循环又有2pi*8/pi+1=17次循环。也就是圆心坐标改变17次。画出17个圆。两个for循环执行完毕后总共画了7*17=119个圆。 在第二个程序中的j是多余的。不凡把它用走统计圆的个数。程序如下: #include <graphics.h> #include <math.h> #include <stdlib.h> #define PI 3.1415926 void main() { int radius,circles,colors; float i; char ch; int GraphDriver=DETECT,GraphMode; initgraph(&GraphDriver,&GraphMode,"");/* 没接触过图形函数的兄弟们先去饿补一下*/ randomize(); for (;;) { int j=0; cleardevice(); colors=random(15)+1; setcolor(colors); /*以上语句为图形初始化及清屏语句*/ /*下面一句即是(呵呵,别说不是一条语句噢) ;) */ radius=random(100); for (circles=30;circles<=150;circles+=20) for (i=0;i<=PI*2;i+=PI/8) { circle(sin(i)*circles+300,cos(i)*circles+210,radius); j++; } /*下面是用户按任意键退出及关闭图形模式*/ printf("%d",j); outtextxy(100,450,"Quit(Yes/No)?"); ch=getche(); if (ch=='y' || ch=='Y') break; } closegraph(); } 而此时得到的j却是112,说明总共画了112个圆。我就想不通用人算的为什么是119个圆呢?难道上面的人计算的有误?(俄,知道了,在计算机中pi是实型,实际计算时不可能像人算的那样把pi给精确的约掉了。第二个for循环所执行的只是16次) 还请286老大讲一下圆心坐标的算法是怎么想到的(绝对牛,我觉得光凭大脑是很难想像到这个圆心的算法的)。 为了让喜欢这个程序的兄弟们加深对此程序的理解。我用下面的函数画出圆心的位置。(其实就是把286的程序抄一下)大家注意改一下下面的第二个for语句的8,改成其他数看看。会有不同的结果。这正是圆心坐标的绝妙之处) #include <graphics.h> #include <math.h> #include <stdlib.h> #define PI 3.1415926 void main() { int circles,colors; float y,i,h; char ch; int driver=DETECT,mode; initgraph(&driver,&mode,""); for(;;) { int j=0; cleardevice(); colors=random(15)+1; setcolor(5); for (circles=30;circles<=150;circles+=20) for (i=0;i<=2*PI;i+=PI/8) { y=sin(i)*circles+300; h=cos(i)*circles+210; j++; putpixel((int)y,(int)h,colors); } printf("%d",j); outtextxy(250,400,"quit(y||n)?"); ch=getch(); if(ch=='y'||ch=='Y') break; } closegraph(); } 还请知者赐教,尤其286。 忘了问一下,怎样截到这种图。tc无法截到这中模式下的图阿。286老大你是怎么截的? [此贴被 霜泉(ljsh012) 在 11月07日12时37分 编辑过] |
B34层 发表时间: 04-11-07 01:56 |
回复: 286 [unique] 版主 | 登录 |
别把问题想的太复杂了。 for (circles=30;circles<=150;circles+=20) //30,50,70...150,共产生7个大圈,将来每个圆的圆心将在这些大圈中定位。 for (i=0;i<=PI*2;i+=PI/8)//将上面每个大圈,8等分。每个等分点就是一个圆心的位置。 circle(sin(i)*circles+300,cos(i)*circles+210,radius);//以radius为半径,以等分点为圆心画圆。 其中: 1 说明总共画了112个圆。我就想不通用人算的为什么是119个圆呢? 应该是112个圆。因为圈在等分时,第一个点与最后一个点重合了。所以画的圆也重合。因为有七个圈,所以应该减七个圆。119-7=112。 2 圆心坐标的算法是怎么想到的 如上所说。 3 怎样截到这种图。 看到图上有个“冻结”二字,就知道了吧?你把这个图变成窗口,然后再按Alt+PrtScn就可以载到了。 |
B35层 发表时间: 04-11-10 09:47 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
感谢286的解答。 你说的截图我无法把他变为窗口阿,在属性里设置为窗口显示但显时还是全屏幕阿。不加载图形驱动的程序可以用窗口显示的。我用的编译器是wintc。麻烦你再讲一下。 |
B36层 发表时间: 04-11-10 13:20 |
回复: 286 [unique] 版主 | 登录 |
Alt+Enter. |
B37层 发表时间: 04-11-10 16:31 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
上面286说的截图的这个方法在2000下可以实现。2003下和xp都无法冻结显示成窗口。不知哪位知道在xp下也能实现此种功能? 谢谢。 |
B38层 发表时间: 04-11-10 17:37 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号