我一直在做曼德尔布洛特集,并试图缩放,但缩放模式变得非常麻烦。当我缩放它完美地缩放,但图像大小减少到原来的一半。下次我再次缩放时,图片大小会增加,并试图跳过查看窗口。代码是c /opengl.在这里发布之前,我试图让我的代码变得干净一点。
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
double dividecubesby = 700;
double left = -2.0;
double right = 2.0;
double bottom = -2.0;
double top = 2.0;
int maxiteration = 128;
int zoomlevel = 3;
double baseSize = 4.0;
double SizeReal;
double SizeImage;
double xco=0.0;
double yco=0.0;
void whatcoordinate(int x,int y)
{
int xp=x;
int yp=y;
double delta1 = (right-left);
double tempx;
double tempy;
double delta=0.0;
double l = dividecubesby/2;
delta = delta1/dividecubesby;
if((xp > l) && (yp < l))
{
tempx = xp*delta;
tempy = yp*delta;
xco = right - tempx;
yco = top - tempy;
if(xco <0)xco=xco*-1;
if(yco <0)yco=yco*-1;
}
else if( (x < l) && (y < l))
{
tempx = xp*delta;
tempy = yp*delta;
xco = right - tempx;
yco = top - tempy;
if(xco >0)xco=xco*-1;
if(yco <0) yco =yco*-1;
}
else if((x < l) && (y > l))
{
tempx = xp*delta;
tempy = yp*delta;
xco = right - tempx;
yco = top - tempy;
if(xco >0)xco=xco*-1;
if(yco >0)yco=yco*-1;
}
else if((x > l) && (y > l))
{
tempx = xp*delta;
tempy = yp*delta;
xco = right - tempx;
yco = right - tempy;
if(xco <0)xco=xco*-1;
if(yco >0)yco=yco*-1;
}
}
void keyPressed(unsigned char key, int x, int y)
{
switch(key)
{
case 'z':
printf("z pressed x= %d, y= %d \n",x,y);
whatcoordinate(x,y);
SizeReal = (pow(2.0, (-zoomlevel)))*baseSize;
SizeImage = (pow(2.0, (-zoomlevel)))*baseSize;
baseSize = right-left;
left = xco- (SizeReal/2);
right = xco + (SizeReal/2);
bottom = yco - (SizeReal/2);
top = yco + (SizeReal/2);
dividecubesby = dividecubesby+500;
maxiteration = maxiteration+500;
zoomlevel=zoomlevel+1;
glutPostRedisplay();
break;
}
}
int mandtest(double Cr, double Ci)
{
double Zr = 0.0;
double Zi = 0.0;
int times = 0;
double temp;
Zr = Zr+Cr;
Zi = Zi+Ci;
while ((((Zr*Zr)+(Zi*Zi))<=4) && (times < maxiteration))
{
temp = (Zr*Zr)-(Zi*Zi);
Zi = 2*Zr*Zi;
Zr = temp+Cr;
Zi = Zi+Ci;
times = times+1;
}
return times;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,1.0f,1.0f);
double deltax = ((right - left)/(dividecubesby-1));//this means length/700
double deltay = ((top- bottom)/(dividecubesby-1));// this means length/700
gluOrtho2D(left,right,bottom,top);
glBegin(GL_POINTS);
for(double x= left;x<=right;x += deltax )
{
for(double y= bottom; y<=top;y += deltay )
{
if((mandtest(x,y))==maxiteration)
{
glColor3f(1.0f,1.0f,1.0f);
glVertex2f(x,y);
}
else
{
glColor3f((float)mandtest(x,y)/10,0.0f,(float)mandtest(x,y)/30);
glVertex2f(x,y);
}
}
}
glEnd();
glFlush();
}
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
}
int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(dividecubesby,dividecubesby);
glutCreateWindow("A Simple OpenGL Windows Application with GLUT");
init();
glutDisplayFunc(display);
glutKeyboardFunc(keyPressed);
glutMainLoop();
return 0;
}
执行时
这个问题通过放置
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
就在gluOrtho2D上面(左,右,底,顶);在显示函数这是用于初始化。这在opengl超级圣经第二章中解释得很好。
我认为您不应该在每次重新渲染时使用gluOrtho2D(左、右、下、上)更改视图变换。只需给它们(初始)固定值。视图将保持不变,如图1所示。您应该只变换传递给Mandelbrot函数的坐标。
正如@ GePopRead提到的:考虑使用纹理。这样效率更高。
我在Java中编码了一个Mandelbrot集分形,并包含了平移和放大分形的能力。唯一的问题是,当我平移图像并试图放大时,它看起来好像试图放大中心并平移一点。平移和缩放不是真正的平移或缩放,而是对分形的重新计算,看起来像是平移或缩放。 这是我的代码。 我能告诉用户在哪里可以让相机更精确地缩放吗? 先谢谢你。 编辑:图片对于任何想知道这个程序将呈现什么。
我希望用户能够将两个图像缩放到一起,同时保持它们之间的正确相对位置。我在其中一幅图像上使用缩放手势检测器,然后将手势扩展到另一幅图像。我的问题是,虽然我可以让图像一起移动,但一旦我尝试缩放第二个图像,翻译就会急剧下降。它们是我不知道的缩放时发生的事情吗?信息。ParentPrecords变量设置在缩放手势检测器的开头,然后再对父对象(基础图像)进行任何更改。
我有一个图像,我正在尝试缩放,因为屏幕大小减少。在桌面上,1336x625分辨率的图像可以正常工作,但一旦屏幕缩小到500x625时,图像就不能适当缩放,边缘也会被削减。我试着把最大宽度和位置。但还是没用。我需要改变什么才能让它工作。 Css代码 Html代码:
我试图放大我的mandelbrot集,我读到了这个问题:如何简单地放大mandelbrot集,但我很难理解它,它不起作用。当我这样计算新的实数和复数时: 新的mandelbrot在两个轴上都有点变形?怎么了?以下是一个例子:http://www.phpdevpad.de/index.php?id=190.
我现在还没有为转换中心或任何东西定义,因为它不起作用。非常感谢你的帮助。我刚刚开始学习HTML,就像昨天一样,所以我确信这是一件简单的事情,我只是受过足够的教育来发现这个问题。
以下是CardView的XML代码: 我尝试对ImageView(和LinearLayout)的属性使用wrap_content,并尝试包含属性android: caleType="fitXY",但它没有帮助,似乎没有任何效果。 谁能帮我一下吗?我非常感谢您的每一句评论,也非常感谢您的帮助。