[收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

Computer Graphics, Animaition, OpenGL, DirectX, OpenCL
24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #21 24game » 2016年10月16日 19:37

523066680 的三角形思路很棒, 我用这个思路重编了

:happy :jiong1 哈哈哈哈, 终于把纯色 五角星 搞到了 140 字节以内了, 还可以减少一点点字节, 但没必要了

i, j 值在 [0,1024] 范围外, 可以被其他色分量函数调用, 而且不影响本身功能

Code: [全选] [展开/收缩] [Download] (Untitled.cpp)
  1. unsigned char RD(int i, int j)
  2. {
  3. if (j<=419||j>547) return i>512?BL(i,~j):GR(i,~j);
  4. i-=512;j-=627;return fabs(1.*j/i)>.726543&&j>-208&&j<0?255:0;
  5. }
  6.  
  7. unsigned char GR(int i, int j)
  8. {
  9. i-=621;j=~j-547;float A=1.25664,x=i*cos(A)-j*sin(A),y=i*sin(A)+j*cos(A);return j<-547?0:i>-109?0:fabs(y/x)>.726543&&y>-208&&y<0?255:0;
  10. }
  11.  
  12. unsigned char BL(int i,int j)
  13. {
  14. i-=403;j=~j-547;float A=-1.25664,x=i*cos(A)-j*sin(A),y=i*sin(A)+j*cos(A);return j<-547?0:i<=-109?0:fabs(y/x)>.726543&&y>-208&&y<0?255:0;
  15. }


Code: [全选] [展开/收缩] [Download] (Untitled.txt)
  1. 计算过程简述
  2.  
  3. 半径 1 的五角星内部小正五边形半径:
  4. rsmall = (Sec[.2*Pi] Tan[.1*Pi])/(Tan[.1*Pi] + Tan[.2*Pi]);
  5. 内部小五边形的边割角半径(五角星的任一尖角到中心的线段)的点到中心的距离:
  6. dc = Tan[.1*Pi]/(Tan[.1*Pi] + Tan[.2*Pi])
  7.  
  8. 五角星半径 300
  9. 开口向上的大三角
  10. 旋转中心: 512, 512+ 300 * rsmall=626.59~=627
  11. 长边 y 坐标界值 512 - 300 * dc - 627 = -207.705
  12. 从左下角指向右上角的角度是(单位:Pi)
  13. (1 - .4)/2 - 0.5 = -0.2
  14. 从右下角指向左上角的角度是(单位:Pi)
  15. -(1 - .4)/2 - 0.5 = -0.8
  16. Tan[((1 - .4)/2 - 0.5)*Pi] = -0.726543
  17.  
  18. 开口向左的大三角旋转中心坐标
  19. {512 + Cos[.5*Pi - .4*Pi]*300*rsmall,  512 + Sin[.5*Pi - .4*Pi]*300*rsmall}
  20. ~= {620.981, 547.41}
  21. 旋转角: .4*Pi ~= 1.25664
  22.  
  23. 开口向右的大三角旋转中心坐标
  24. {403.019, 547.41}
  25. 旋转角: -.4*Pi ~= -1.25664
  26.  
  27. j-627<=-208 <==> j <= 419

24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #22 24game » 2016年10月16日 20:33

@523066680

你最后 20#http://www.code-by.org/viewtopic.php?p=518#p518 的图形是这样的, 我有没搞错:

图片

我在 21# 是分成了如下三个区域来处理, 其中最亮的部分由 RD 自行计算, 较暗的两个部分分别给 GR 和 BL 来计算
图片

头像
523066680
Administrator
Administrator
帖子: 373
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 36 times
Been thanked: 39 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #23 523066680 » 2016年10月16日 22:16

24game 写了:你最后 20# 的图形是这样的

咦,我这里试了把RGB的代码代入1楼的模板,除了五角星反过来,颜色没有问题。

24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #24 24game » 2016年10月16日 22:40

523066680 写了:咦,我这里试了把RGB的代码代入1楼的模板,除了五角星反过来,颜色没有问题。


是不是和编译选项有关

Code: [全选] [展开/收缩] [Download] (Untitled.cpp)
  1. // NOTE: compile with g++ filename.cpp -std=c++11

头像
523066680
Administrator
Administrator
帖子: 373
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 36 times
Been thanked: 39 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #25 523066680 » 2016年10月16日 23:22

24game 写了:是不是和编译选项有关
Code: [全选] [展开/收缩] [Download] (Untitled.cpp)
  1. // NOTE: compile with g++ filename.cpp -std=c++11

感觉可能还是代码什么地方不同,会不会是和文件读写占用、打开PPM的软件有关。已经提供文件,便于对比

pentagon.zip
(593.67 KiB) 下载 10 次
pentagon.zip
(593.67 KiB) 下载 10 次

24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #26 24game » 2016年10月17日 00:33

523066680 写了:感觉可能还是代码什么地方不同...


是 Mingw/GCC 的版本问题, 之前 用的

Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2

这是 Dev-C++ 的最新版本, 也是 2005 年的了, 再没更新

之后卸了它, 现在装的 Mingw GCC 5.3.0

在 Code::Blocks 里编译时无论 用不用 -std=c++11 选项, 生成的图片都正常

24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #27 24game » 2016年10月18日 15:18

@523066680

绘图用的什么东东啊

图片

头像
523066680
Administrator
Administrator
帖子: 373
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 36 times
Been thanked: 39 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #28 523066680 » 2016年10月18日 16:05

24game 写了:@523066680

绘图用的什么东东啊


是不是很6,最早我为公司做了一些设计的工作,但是没门路啊,绕弯路,我用word文档画矢量图,手都画残了。我以为Photoshop画图会
好一些,其实不然,PS的Bezier曲线工具都没有开源软件GIMP好用。
现在觉得CorelDraw最好用,那张图使用Coreldraw画的。相应的开源选项,Inkscape

24game
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月02日 22:09
拥有现金: 锁定
Has thanked: 3 times
Been thanked: 17 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #29 24game » 2016年10月18日 16:16

523066680 写了:
24game 写了:是不是很6,最早我为公司做了一些设计的工作, ..那张图使用Coreldraw画的。


很 6!

呃呃, 就是 Coreldraw !!! 好大, 哈哈

我也画过类似的东东, 用的几何画板, 现在都忘光了

这个百科词条不是我创的, 但内容都是我的, 准确名字应该叫 单规五等分圆 就是只用圆规, 不能用直尺的作图方式
http://baike.baidu.com/link?url=TKqNQ3f ... AaIu2Dvp2q

http://a7d.net46.net/pentagon/5_pentagon.html

图片

头像
523066680
Administrator
Administrator
帖子: 373
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 36 times
Been thanked: 39 times
联系:

Re: [收集]用三段 140 字符以内的代码生成一张 1024×1024 的图片

帖子 #30 523066680 » 2016年10月20日 23:44

图片
代码有点长,有空简化再发


回到 “计算机图形”

在线用户

用户浏览此论坛: 没有注册用户 和 1 访客