PDA

View Full Version : یک سایت



mostafa612003
سه شنبه 13 آبان 1382, 13:22 عصر
سلام
اگر می شود شما این سایت را ببینید
فکر می کنید این موزه مجازی با جاوا پیاده سازی شده است؟
اگر اینطور باشد چطوری این کار انجام شده است؟
متشکرم
http://www.hermitagemuseum.org/html_En/08/hm88_0_0.html

ناصرقلی
سه شنبه 13 آبان 1382, 13:57 عصر
بله! با یک applet ولی چطوریش که به این سادگی ها نیست!

ناصرقلی
سه شنبه 13 آبان 1382, 14:04 عصر
این هم سورس اپلتی که در این سایت استفاده شده! ببین به کارت میاد!

// Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov Date: 2003/11/04 14:31:06
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: JAX

import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;
import java.io.PrintStream;
import java.util.*;

public class hmpanlet extends Applet
implements Runnable, ImageProducer, ImageConsumer
{

public final boolean mouseDown(Event event, int i, int j)
{
f4 = true;
f5 = i;
f6 = j;
if(event.shiftDown())
{
f7 = true;
f13 = System.currentTimeMillis();
}
return true;
}

public final boolean mouseUp(Event event, int i, int j)
{
f4 = false;
if(f7)
{
f7 = false;
f12 += System.currentTimeMillis() - f13;
}
return true;
}

public final boolean mouseDrag(Event event, int i, int j)
{
if(f4)
{
int k = i - f5;
int l = j - f6;
if(f7)
{
double d = 620D / (double)(f25 + f26);
double d1 = f31 / 60D;
double d2 = 0.001D * (double)k * (double)Math.abs(k);
double d3 = 0.001D * (double)l * (double)Math.abs(l);
if(d2 > 50D)
d2 = 50D;
if(d2 < -50D)
d2 = -50D;
if(d3 > 50D)
d3 = 50D;
if(d3 < -50D)
d3 = -50D;
double d4 = d2;
double d5 = d3;
f9 = d * d1 * d4 * 0.5D;
if(event.controlDown() || event.metaDown())
f10 = d5 * 0.01D;
else
f8 = d * d1 * d5 * -0.25D;
} else
{
f14 += k;
if(event.controlDown() || event.metaDown())
f15 += l;
else
f16 += l;
f5 = i;
f6 = j;
}
}
return true;
}

public final boolean keyDown(Event event, int i)
{
if(f12 != 0L && !f7)
System.out.println("Velocity FPS: " + (1000D * (double)f11) / (double)f12 + " (" + f11 + " images in " + (double)f12 / 1000D + " seconds)");
if(f2 != 0L)
System.out.println("Burst FPS: " + (1000D * (double)f3) / (double)f2);
System.out.println("azimuth = " + f30 + ", FOV angle = " + f31 + ", elevation = " + f32);
System.out.println("azimuth v = " + f9 + ", FOV angle v = " + f10 + ", elevation v = " + f8);
return true;
}

public final void paint(Graphics g)
{
update(g);
}

public final void update(Graphics g)
{
if(f0 != null)
g.drawImage(f0, 0, 0, this);
if(f18 && f0 == null)
{
Rectangle rectangle = bounds();
int i = rectangle.width;
int j = rectangle.height;
g.setColor(Color.white);
g.fillRect(0, 0, i, j);
g.setFont(new Font("Helvetica", 3, 12));
FontMetrics fontmetrics = g.getFontMetrics();
String s = "Hot";
String s1 = "Media";
int k = (i - (fontmetrics.stringWidth(s) + fontmetrics.stringWidth(s1) + 4)) / 2;
g.setColor(Color.red);
g.drawString(s, k, j / 2);
g.setFont(new Font("Helvetica", 2, 12));
g.setColor(Color.black);
g.drawString(s1, k + fontmetrics.stringWidth(s) + 2, j / 2);
}
}

public final void run()
{
Thread thread = Thread.currentThread();
try
{
if(thread == f1)
{
MediaTracker mediatracker = new MediaTracker(this);
String s = getParameter("BACKGROUND");
Image image = getImage(getDocumentBase(), s);
mediatracker.addImage(image, 0);
try
{
for(; !mediatracker.checkAll(); mediatracker.waitForAll(1000L));
}
catch(InterruptedException _ex) { }
try
{
m13(image.getSource());
Rectangle rectangle = bounds();
m1(rectangle.width, rectangle.height);
String s2 = getParameter("azimuth");
String s4 = getParameter("fovangle");
String s6 = getParameter("elevation");
double d = 0.0D;
double d1 = 60D;
double d2 = 0.0D;
if(s2 != null)
d = Double.valueOf(s2).doubleValue();
if(s4 != null)
d1 = Double.valueOf(s4).doubleValue();
if(s6 != null)
d2 = Double.valueOf(s6).doubleValue();
m8(d, d1, d2);
f0 = createImage(this);
}
catch(Exception exception1)
{
System.out.println("PanoramIXlet.run: " + exception1);
}
try
{
repaint();
}
catch(Exception exception2)
{
System.out.println("PanoramIXlet.run: " + exception2);
}
String s1 = getParameter("azimuth-v");
String s3 = getParameter("fovangle-v");
String s5 = getParameter("elevation-v");
if(s1 != null)
f9 = Double.valueOf(s1).doubleValue();
if(s3 != null)
f10 = Double.valueOf(s3).doubleValue();
if(s5 != null)
f8 = Double.valueOf(s5).doubleValue();
if(s1 != null || s3 != null || s5 != null)
{
f7 = true;
f13 = System.currentTimeMillis();
}
while(f1 == thread)
try
{
if(f0 != null)
{
if(f17 == 0L)
f17 = System.currentTimeMillis();
if(System.currentTimeMillis() - f17 > 2000L && f18)
{
f18 = false;
repaint();
}
}
if(!m0())
try
{
Thread.sleep(50L);
}
catch(InterruptedException _ex) { }
}
catch(Exception exception3)
{
System.out.println("PanoramIXlet.run: " + exception3);
}
}
}
catch(Exception exception)
{
System.out.println("PanoramIXlet.run: " + exception);
}
}

public final void start()
{
f11 = 0;
f12 = 0L;
f3 = 0;
f2 = 0L;
requestFocus();
if(f1 == null)
{
f1 = new Thread(this, "PanoramIX recalc");
f1.start();
}
}

public final void stop()
{
if(f1 != null && f1.isAlive())
f1.stop();
f1 = null;
}

private final boolean m0()
{
double d = 620D / (double)(f25 + f26);
double d1 = f31 / 60D;
long l = System.currentTimeMillis();
boolean flag = false;
if(f7)
{
if(f9 != 0.0D || f10 != 0.0D || f8 != 0.0D)
{
flag = true;
m9(f9);
m11(f10);
m10(f8);
m3(null);
f11++;
long l1 = System.currentTimeMillis() - l;
try
{
Thread.sleep((50L * l1) / 950L);
}
catch(InterruptedException _ex) { }
}
} else
{
d *= 2D;
if(f14 != 0)
{
m9(d * d1 * (double)f14 * 0.5D);
f14 = 0;
flag = true;
}
if(f15 != 0)
{
m11((double)f15 * 0.01D);
f15 = 0;
flag = true;
}
if(f16 != 0)
{
m10(d * d1 * (double)f16 * -0.25D);
f16 = 0;
flag = true;
}
if(flag)
{
m3(null);
f3++;
long l2 = System.currentTimeMillis() - l;
f2 += l2;
try
{
Thread.sleep((50L * l2) / 950L);
}
catch(InterruptedException _ex) { }
}
}
return flag;
}

public final void setOrientation(double d, double d1, double d2)
{
m8(d, d1, d2);
m3(null);
}

public final void SetControlValues(int i, int j, int k)
{
setOrientation(i, j, k);
}

private final void m1(int i, int j)
{
f19 = i;
f20 = j;
f23 = new int[i + 1];
f24 = new double[i / 2 + 1];
f22 = new int[i * j];
}

public final synchronized void addConsumer(ImageConsumer imageconsumer)
{
if(f21.contains(imageconsumer))
return;
f21.addElement(imageconsumer);
try
{
m2(imageconsumer);
m3(imageconsumer);
}
catch(Exception _ex)
{
if(isConsumer(imageconsumer))
imageconsumer.imageComplete(1);
}
}

private final void m2(ImageConsumer imageconsumer)
{
if(isConsumer(imageconsumer))
imageconsumer.setDimensions(f19, f20);
if(isConsumer(imageconsumer))
imageconsumer.setColorModel(ColorModel.getRGBdefau lt());
if(isConsumer(imageconsumer))
imageconsumer.setHints(14);
}

public final synchronized boolean isConsumer(ImageConsumer imageconsumer)
{
return f21.contains(imageconsumer);
}

public final synchronized void removeConsumer(ImageConsumer imageconsumer)
{
f21.removeElement(imageconsumer);
}

public final void startProduction(ImageConsumer imageconsumer)
{
addConsumer(imageconsumer);
}

public final void requestTopDownLeftRightResend(ImageConsumer imageconsumer)
{
}

private final void m3(ImageConsumer imageconsumer)
{
int i = f19;
int j = f20;
int k = f25;
double d = (((double)k / 6.2831853071795862D) * 360D) / f33;
double d1 = Math.tan(f31 * 0.0087266462599716477D);
double d2 = (2D * d1) / (double)i;
double d3 = d * d2;
m6(f33);
double d4 = (3.1415926535897931D * f30) / 180D;
double d5 = (double)f26 * 0.5D;
double d6 = 0.5D * d3 * (double)j;
double d7 = m7(d5, d6, d);
double d8 = d6 - d7;
double d9 = d6 + d7;
int ai[] = f23;
double ad[] = f24;
double d10 = -d1;
int l = 0;
int i1 = i / 2 + 1;
for(; l < i; l++)
{
double d11 = Math.atan(d10);
int j1 = (int)((d11 + d4) * d);
if(j1 < 0)
j1 += k;
if(j1 >= k)
j1 -= k;
ai[l] = j1;
if(l < i1)
ad[l] = Math.cos(d11);
d10 += d2;
}

d10 = -d1;
m4(d5, d7, d, d3, j, i, i1, k);
m5(imageconsumer);
}

private final void m4(double d, double d1, double d2, double d3, int i, int j, int k, int l)
{
int ai[] = f23;
double ad[] = f24;
int ai1[][] = f29;
int i1 = f25 * f26;
int ai2[] = f22;
double d4 = (d * d1) / d2 - 0.5D * d3 * (double)i;
for(int j2 = 0; j2 < i; j2++)
{
double d5 = d3 * (double)j2 + d4;
int j1 = j * j2;
int k1 = (j1 + j) - 1;
int l1 = 0;
for(int i2 = j - 1; l1 < k; i2--)
{
int k2 = (int)(d + d5 * ad[l1]) * l;
int l2 = ai[l1] + k2;
if(l2 < 0 || l2 >= i1)
{
ai2[j1] = ai2[k1] = 0xff000000;
} else
{
ai2[j1] = ai1[l2 >> 19][l2 & 0x7ffff];
int i3 = ai[i2] + k2;
ai2[k1] = ai1[i3 >> 19][i3 & 0x7ffff];
}
j1++;
k1--;
l1++;
}

}

}

private final void m5(ImageConsumer imageconsumer)
{
if(imageconsumer != null)
{
imageconsumer.setPixels(0, 0, f19, f20, ColorModel.getRGBdefault(), f22, 0, f19);
imageconsumer.imageComplete(2);
return;
}
for(Enumeration enumeration = f21.elements(); enumeration.hasMoreElements();)
{
ImageConsumer imageconsumer1 = (ImageConsumer)enumeration.nextElement();
imageconsumer1.setPixels(0, 0, f19, f20, ColorModel.getRGBdefault(), f22, 0, f19);
if(isConsumer(imageconsumer1))
imageconsumer1.imageComplete(2);
}

}

private final void m6(double d)
{
if(f31 > d)
{
f31 = d;
f30 = 0.5D * d;
} else
{
if(d >= 360D)
return;
if(f30 > d - 0.5D * f31)
{
if(2D * f30 > d + 360D)
f30 = 0.5D * f31;
else
f30 = d - 0.5D * f31;
} else
if(f30 < 0.5D * f31)
f30 = 0.5D * f31;
}
}

private final double m7(double d, double d1, double d2)
{
boolean flag = false;
double d3 = d2 * Math.tan(f32 * 0.017453292519943295D);
double d4 = d1 - (d * d3) / d2;
double d9 = d1 + (d * d3) / d2;
double d12 = d2 * 2D;
if(d12 < d)
d12 = d;
if(d4 > d)
{
double d5 = d;
d3 = ((d1 - d5) * d2) / d;
flag = true;
d9 = d1 + d3;
if(d9 > d)
{
d3 = 0.0D;
flag = true;
double d6 = d1;
d9 = d1;
}
} else
if(d9 > d)
{
double d10 = d;
d3 = ((d10 - d1) * d2) / d;
flag = true;
double d7 = d1 - d3;
if(d7 > d)
{
d3 = 0.0D;
flag = true;
double d8 = d1;
double d11 = d1;
}
}
if(flag)
f32 = Math.atan2(d3, d2) * 57.295779513082323D;
return d3;
}

private final void m8(double d, double d1, double d2)
{
m12(d1);
f30 = d;
f32 = d2;
}

private final void m9(double d)
{
f30 += d;
if(f30 < 0.0D)
f30 += 360D;
if(f30 >= 360D)
f30 -= 360D;
}

private final void m10(double d)
{
f32 -= d;
if(f32 < -89D)
f32 = -89D;
if(f32 > 89D)
f32 = 89D;
}

private final void m11(double d)
{
if(d >= 0.0D)
f31 *= 1.0D + d;
else
f31 /= 1.0D - d;
if(f31 < 15D)
f31 = 15D;
if(f31 > 100D)
f31 = 100D;
}

private final void m12(double d)
{
f31 = d;
if(f31 < 15D)
f31 = 15D;
if(f31 > 100D)
f31 = 100D;
}

public final void setDimensions(int i, int j)
{
f25 = i;
f26 = j;
int k = f25 * f26;
int l = k >> 19;
f29 = new int[l + 1][];
int i1;
for(i1 = 0; i1 < l; i1++)
f29[i1] = new int[0x80000];

f29[i1] = new int[k & 0x7ffff];
}

public final void setProperties(Hashtable hashtable)
{
}

public final void setColorModel(ColorModel colormodel)
{
}

public final void setHints(int i)
{
}

public final void setPixels(int i, int j, int k, int l, ColorModel colormodel, byte abyte0[], int i1,
int j1)
{
for(int k1 = 0; k1 < l; k1++)
{
int l1 = i1 + k1 * j1;
int i2 = i + (j + k1) * f25;
for(int j2 = 0; j2 < k;)
{
f29[i2 >> 19][i2 & 0x7ffff] = colormodel.getAlpha(abyte0[l1] & 0xff) << 24 | colormodel.getRed(abyte0[l1] & 0xff) << 16 | colormodel.getGreen(abyte0[l1] & 0xff) << 8 | colormodel.getBlue(abyte0[l1] & 0xff);
j2++;
l1++;
i2++;
}

}

}

public final void setPixels(int i, int j, int k, int l, ColorModel colormodel, int ai[], int i1,
int j1)
{
for(int k1 = 0; k1 < l; k1++)
{
int l1 = i1 + k1 * j1;
int i2 = i + (j + k1) * f25;
for(int j2 = 0; j2 < k;)
{
f29[i2 >> 19][i2 & 0x7ffff] = ai[l1] | 0xff000000;
j2++;
l1++;
i2++;
}

}

}

public final synchronized void imageComplete(int i)
{
switch(i)
{
case 2: // '\002'
case 3: // '\003'
f27 = 1;
break;

case 1: // '\001'
case 4: // '\004'
default:
f27 = -1;
break;
}
f28.removeConsumer(this);
notifyAll();
}

public final synchronized boolean m13(ImageProducer imageproducer)
{
f28 = imageproducer;
f27 = 0;
imageproducer.startProduction(this);
try
{
while(f27 == 0)
wait();
}
catch(InterruptedException _ex)
{
return false;
}
return f27 > 0;
}

public hmpanlet()
{
f18 = true;
hmpanlet _tmp = this;
double _tmp1 = 0.001D;
hmpanlet _tmp2 = this;
double _tmp3 = 50D;
hmpanlet _tmp4 = this;
double _tmp5 = 0.5D;
hmpanlet _tmp6 = this;
double _tmp7 = -0.25D;
hmpanlet _tmp8 = this;
double _tmp9 = 0.01D;
f21 = new Vector();
f30 = 60D;
f31 = 60D;
hmpanlet _tmp10 = this;
double _tmp11 = 15D;
hmpanlet _tmp12 = this;
double _tmp13 = 100D;
hmpanlet _tmp14 = this;
double _tmp15 = 3.1415926535897931D;
f33 = 360D;
}

public Image f0;
public Thread f1;
public long f2;
public int f3;
public boolean f4;
public int f5;
public int f6;
public boolean f7;
public double f8;
public double f9;
public double f10;
public int f11;
public long f12;
public long f13;
public int f14;
public int f15;
public int f16;
public long f17;
public boolean f18;
public int f19;
public int f20;
public Vector f21;
public int f22[];
public int f23[];
public double f24[];
public int f25;
public int f26;
public int f27;
public ImageProducer f28;
public int f29[][];
public double f30;
public double f31;
public double f32;
public double f33;
}

ناصرقلی
سه شنبه 13 آبان 1382, 14:09 عصر
ببین این هم عکس مورد استفاده توسط اپلت برای ایجاد مشاهده مجازی
http://www.hermitagemuseum.org/imgs_En/08/hm88_0_1_38.jpg

در فایل زمیمه عکس به نام a.jpg را با یه کس دیگه عوض کن تا ببینی چطوری اینکار انجام میشه

mostafa612003
چهارشنبه 14 آبان 1382, 07:33 صبح
سلام
خیلی متشکرم
برای اینکه از این سورس استفاده کنم باید چه کارهایی را انجام بدهم؟
من کمی جاوا بلدم اما نمی دانم که چگونه باید فایلهای جاوا را در روی دستگاهم اجرا کنم
در ضمن فایل زیپی را که دادید موزه را نمی آورد

خیلی ممنون

ناصرقلی
چهارشنبه 14 آبان 1382, 09:32 صبح
سلام
یک راه معمول اجرای این فایل که اپلت است همان قرار دادن در یک متن HTML است.(<applet>) اگر در متن html سایت موزه دنبال applet بگردید پیدا می کنید.
راه دوم که فکر نمی کنم زیاد به کارتون بیاد استفاده از AppletViewr است.
در مورد نشون ندادن:
احتمالا با تغییر نام فایل html به یک نام ساده مثلا a.html مشکل حل بشه.

mostafa612003
چهارشنبه 14 آبان 1382, 09:54 صبح
سلام
خیلی متشکرم
توانستم از برنامه ای که دادید استفاده کنم
فقط نمی دونم چرا هر عکسی را می گذارم بزرگش را نشان می دهد؟

ناصرقلی
چهارشنبه 14 آبان 1382, 10:44 صبح
به خاطر پارامتر ست شده در تگ applet !
width , height

mostafa612003
چهارشنبه 14 آبان 1382, 11:10 صبح
سلام
دستتون درد نکند
یک سوال دیگر اینکه شما چطوری سورس این اپلت را به دست آوردید؟
متشکرم

mostafa612003
سه شنبه 04 آذر 1382, 14:53 عصر
سلام
من این نرم افزار را روی سرورم گذاشتم تا افراد دیگر بتوانند آن را ببینند ولی نتوانستند
فکر می کنید که برای چی این اتفاق می افتد؟

متشکرم

ناصرقلی
شنبه 08 آذر 1382, 06:49 صبح
سلام
کدام نرم افزار ، اپلت یا دیکامپایلر؟!

mostafa612003
شنبه 08 آذر 1382, 07:46 صبح
اپلت

mostafa612003
شنبه 08 آذر 1382, 08:40 صبح
سلام
خیلی ممنون
مشکل حل شد
آدرس اپلت را اشتباه داده بودم