论坛: 编程破解 标题: 一条编程语句生成的图片 复制本贴地址    
作者: 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]   论坛用户   登录
请指教!

B1层 发表时间: 09/23 10:38

回复: jackleon [jackleon]   论坛用户   登录
过程是怎样实现的?

B2层 发表时间: 09/23 10:59

回复: 日月双星 [abctm]   版主   登录
什么语言
logo语言么?

B3层 发表时间: 09/23 14:03

回复: 老实和尚 [ricky]   版主   登录
c语言,不过年代久远,不记得画圆的语句了

B4层 发表时间: 09/23 16:39

回复: 286 [unique]   版主   登录
更新首贴

B5层 发表时间: 09/25 12:28

回复: 月之御者 [kert_t8]   论坛用户   登录
我记得小的时候玩而过一种玩具,就是一把大尺子,里边有许多带齿轮的圈儿,然后把一个圆形带齿的圆片放到圈里。这个圆片的不同位置有小孔,可以把笔插进去,然后就用笔带着圆片在圈里画园,然后一圈一圈的就可以画出花朵、焰火等简单的图案,不知道原理和这个是不是一样的。
这里边的数学原理好像有点复杂哦
应该是吧,呵呵:)

B6层 发表时间: 09/25 12:55

回复: 寒枫 [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]   论坛用户   登录
唉,其实我看错了,一看到那个radius就以为是半径,其实这个图的半径定格为60,就是说每个圆的大小是一样的,是吧?286

后来一想,如果这个半径再来个循环,可能这张图就更有艺术感了,只是可能,没去试,怕想破头脑,这循环的确都绕人的,有空弄出来的话给大家看看,争取也用一条语句,不然这程序所表现出来的东西也就没特色了



B9层 发表时间: 09/25 17:41

回复: 寒枫 [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]   论坛用户   登录
哈哈,我和286在争先恐后发帖啊,上面两张几乎同时发的,286可能你也没想到在你发之前,就在那一瞬间我又发了一张,还是我快,嘿嘿···

我想20cn本来就是个学习的园地,不要只想着去攻击、入侵什么的,还是干正经事要紧,286可以把你的原创的源程序发点枫弟吗?(不好意思,称兄道弟了,不要嫌弃呀~~~)我想学习学习,就当是我成长扶我一把,OK?

给您添麻烦了···


E-mail:bug_me@163.com

B12层 发表时间: 09/25 18:01

回复: 寒枫 [ceo_8008]   论坛用户   登录
286,不要怪我罗嗦,你这句:“而是每个圆的圆心所在的"圆"的半径”

我想没几个人能理解,我觉得那个radius是确定下一个(轮)圆的圆心

所在的位置,而且既然半径定格在60了,又怎么来用变量来表达半径呢

所以你那样表达是不是应该改一下,或者解释得肤浅点呢?

不好意思~~~~~~~讨论讨论而已··

B13层 发表时间: 09/25 18:10

回复: 286 [unique]   版主   登录
TO 寒枫:
  你说的对,写radius是有点让人迷惑之处.谢谢!
  一个论坛不怕讨论,更不怕争吵(我这个班主就是吵来的, :) ),怕的就是没人理,感觉就象自作多情一样.
  版本已更新,见首贴.

B14层 发表时间: 09/26 12:06

回复: 寒枫 [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]   论坛用户   登录
你指的麻烦是……~~~~~~~??

B17层 发表时间: 09/28 08:41

回复: Neptune [admin_20cn]   论坛用户   登录
好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!好!

B18层 发表时间: 09/28 11:55

回复: 子木 [lwei889]   论坛用户   登录
我也正在学c语言,但还没有接触到图形函数,所以看的不太明白,我在机子上运行一下 ,的确很棒

B19层 发表时间: 09/29 14:30

回复: 零下一度 [xiaoshi]   论坛用户   登录
在tc2.0里有一个自带的测试显卡的.c文件,看看里面的东西,回学的东西,名字不记的了

B20层 发表时间: 10/03 11:17

回复: 一条人 [nuzhou]   论坛用户   登录
有TC2。0的压缩包吗? 有哪位同志有给个。

B21层 发表时间: 10/03 12:14

回复: collimator [collimator]   论坛用户   登录
这个好像、Q-basic中有说

B22层 发表时间: 10/05 01:08

回复: 海鬼 [blindeaf]   论坛用户   登录
太酷了,不得不佩服

B23层 发表时间: 10/07 20:34

回复: honyry [honyry]   论坛用户   登录
ch=getche();
呵呵 在学校时经常用这个语句,今天早上还想找呢!
竟在这里也能看到

B24层 发表时间: 10/07 20:58

回复: 永恒的飞天 [xto]   论坛用户   登录
一流呀~~~~286,服你啦~
那里有一天,我也要写出这么一流的程序,看着来吧,嘿嘿(虽然才刚学)

B25层 发表时间: 10/08 05:08

回复: netcody [netcody]   论坛用户   登录
286真是用苦良心呀,

非感谢你这么细心和耐心,

在你身上又让我看到了学C的希望了,

B26层 发表时间: 10/19 20:15

回复: 零下一度 [xiaoshi]   论坛用户   登录
tc中测试显卡程序::
 
略。

[因为该源程序是TC自带,用户可以直接从TC系统中找到。]

[此贴被 286(unique) 在 10月21日17时02分 编辑过]

B27层 发表时间: 10/20 17:17

回复: 懒猫 [xjingbin0]   论坛用户   登录
呃编译运行后为何出现如下情况。

B28层 发表时间: 04-09-03 08:21

回复: 懒猫 [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]   论坛用户   登录
好,很好,好得很。

B31层 发表时间: 04-09-04 18:38

回复: 戒色 [jiese]   论坛用户   登录
我的TC中不能出现中文是什么原因?能不能告诉我解救的法子呢

B32层 发表时间: 04-09-12 18:36

回复: 小熊 [superwww]   论坛用户   登录
计算机图形学啊

B33层 发表时间: 04-09-15 22:47

回复: 霜泉 [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]   论坛用户   登录
感谢286的解答。
你说的截图我无法把他变为窗口阿,在属性里设置为窗口显示但显时还是全屏幕阿。不加载图形驱动的程序可以用窗口显示的。我用的编译器是wintc。麻烦你再讲一下。

B36层 发表时间: 04-11-10 13:20

回复: 286 [unique]   版主   登录
Alt+Enter.

B37层 发表时间: 04-11-10 16:31

回复: 霜泉 [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号