百分求助(一)

thebirdofwonder 2004-01-03 11:33:09
我这里这里有两道图形学方面的问题,其实基本上是属于数学问题,是我们老师在课堂上提出来的,困扰我很久了,老师也没有说目前到底有没有解决的方法,所以在这里发一下,还请大家帮忙思考一下,最先写清楚解决方法的给分。如果本题目前无解决的方法,凡是给出一定解决思路的都给分。题目如下:
一、关于分形学的一道问题。Barnsley叶子问题我想大家都熟悉吧,生成Barnsley叶子的方法如下有四种策略:

1:x=0; y=0.16*x;
2:x=0.85*x+0.04*y; y=-0.04*x+0.85*y+1.6;
3:x=-0.15*x+0.28*y; y=0.26*x+0.24*y+0.44;
4:x=0.2*x-0.26*y; y=0.23*x+0.22*y+1.6;
各种选择的概率是0.01;0.85;0.07;0.07.通过此算法生成一个漂亮的叶子图案.问题是如何确定这种方法生成图形的界,如包围矩形等.
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
thebirdofwonder 2004-01-05
  • 打赏
  • 举报
回复
///////////////////////
//坐标放缩函数的实现 //
///////////////////////
int nZoom_x(double x)
{
return (int)(260+350*(x-XMAX)/(XMAX-XMIN));
}
int nZoom_y(double y)
{
return (int)(400-350*(y-YMIN)/(YMAX-YMIN));
}
hahu 2004-01-05
  • 打赏
  • 举报
回复
可能都跑到外面去了
我看不到
nZoom_x
nZoom_y是怎么样的呢
thebirdofwonder 2004-01-05
  • 打赏
  • 举报
回复
void Barnsley(HDC hdc)
{
int i,j;
double x,y,x2,y2;
double rnd;
double select[4];


select[0] = 100;
select[1] = select[0] + 8500;
select[2] = select[1] + 700;
select[3] = select[2] + 700;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

for(i=0; i<=100000; i++)
{
rnd = rand()%10000;


for(j=0;j<=3;j++)
{
if(rnd<select[j])
{ break;
}
}
switch(j){
case 0: x2 = 0; y2 = 0.16*y;break;
case 1: x2 = 0.85*x + 0.04*y; y2 = -0.04*x +0.8*y +1.6;break;
case 2: x2 = -0.15*x + 0.28*y; y2 = 0.26*x + 0.24*y + 0.44;break;
case 3: x2 = 0.2*x-0.26*y; y2 = 0.25*x + 0.22*y +1.6;break;

}
x = x2;y=y2;
if(i>500){
SetPixel(hdc,nZoom_x(x),nZoom_y(y),RGB(20,20,160));
}
}
}
hahu 2004-01-04
  • 打赏
  • 举报
回复
另外加四个变量不行吗
Xmin,Ymin,
Xmax,Ymax;
生成点以后
if(x<Xmin)Xmin=x;
....
我也没做过Barnsley叶子不知这样行不行
(如果你有代码能不能给我一份,我也试试看)

4,447

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧