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

Computer Graphics, Animaition, OpenGL, DirectX, OpenCL
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

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

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

i, j 值在 [0,1024] 范围外, 可以被其他色分量函数调用, 而且不影响本身功能
unsigned char RD(int i, int j)
{
if (j<=419||j>547) return i>512?BL(i,~j):GR(i,~j);
i-=512;j-=627;return fabs(1.*j/i)>.726543&&j>-208&&j<0?255:0;
}

unsigned char GR(int i, int j)
{
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;
}

unsigned char BL(int i,int j)
{
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;
}
计算过程简述

半径 1 的五角星内部小正五边形半径:
rsmall = (Sec[.2*Pi] Tan[.1*Pi])/(Tan[.1*Pi] + Tan[.2*Pi]);
内部小五边形的边割角半径(五角星的任一尖角到中心的线段)的点到中心的距离:
dc = Tan[.1*Pi]/(Tan[.1*Pi] + Tan[.2*Pi])

五角星半径 300
开口向上的大三角
旋转中心: 512, 512+ 300 * rsmall=626.59~=627
长边 y 坐标界值 512 - 300 * dc - 627 = -207.705
从左下角指向右上角的角度是(单位:Pi)
(1 - .4)/2 - 0.5 = -0.2
从右下角指向左上角的角度是(单位:Pi)
-(1 - .4)/2 - 0.5 = -0.8
Tan[((1 - .4)/2 - 0.5)*Pi] = -0.726543

开口向左的大三角旋转中心坐标
{512 + Cos[.5*Pi - .4*Pi]*300*rsmall, 512 + Sin[.5*Pi - .4*Pi]*300*rsmall}
~= {620.981, 547.41}
旋转角: .4*Pi ~= 1.25664

开口向右的大三角旋转中心坐标
{403.019, 547.41}
旋转角: -.4*Pi ~= -1.25664

j-627<=-208 <==> j <= 419
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

@523066680

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

图片

我在 21# 是分成了如下三个区域来处理, 其中最亮的部分由 RD 自行计算, 较暗的两个部分分别给 GR 和 BL 来计算
图片
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

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

帖子 523066680 »

24game 写了:你最后 20# 的图形是这样的
咦,我这里试了把RGB的代码代入1楼的模板,除了五角星反过来,颜色没有问题。
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

523066680 写了: 咦,我这里试了把RGB的代码代入1楼的模板,除了五角星反过来,颜色没有问题。
是不是和编译选项有关
// NOTE: compile with g++ filename.cpp -std=c++11
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

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

帖子 523066680 »

24game 写了: 是不是和编译选项有关
// NOTE: compile with g++ filename.cpp -std=c++11
感觉可能还是代码什么地方不同,会不会是和文件读写占用、打开PPM的软件有关。已经提供文件,便于对比
pentagon.zip
(593.67 KiB) 已下载 52 次
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

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
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

@523066680

绘图用的什么东东啊

图片
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

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

帖子 523066680 »

24game 写了:@523066680

绘图用的什么东东啊
是不是很6,最早我为公司做了一些设计的工作,但是没门路啊,绕弯路,我用word文档画矢量图,手都画残了。我以为Photoshop画图会
好一些,其实不然,PS的Bezier曲线工具都没有开源软件GIMP好用。
现在觉得CorelDraw最好用,那张图使用Coreldraw画的。相应的开源选项,Inkscape
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

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

帖子 24game »

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
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

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

帖子 523066680 »

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

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客