import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.text.*;
public class Schatten extends Applet implements MouseMotionListener
{
// Elemente START
Canvas CanZeife;
TextField TfPosX, TfPosY;
Label LaPosX, LaPosY;
Panel PaCenter, PaEast, PaCanZeife, PaTfPosX, PaTfPosY, PaLaPosX, PaLaPosY, PaPosX, PaPosY;
//Elemente ENDE
//Variablen START
int CanSize=400;
int CanColRot = 27, CanColGruen = 58, CanColBlau = 39;
Color CanColor = new Color(CanColRot, CanColGruen, CanColBlau); //dunkelgrün
int MouseX, MouseY, MouseX1, MouseY1;
//Variablen ENDE
//Kegel START
int KegelMitteX=CanSize/2;
int KegelMitteY=CanSize/2;
int PxNeu, PyNeu, Px2Neu, Py2Neu, Px3Neu, Py3Neu;
int u=200;
//Kegel ENDE
public void init()
{
CanZeife = new Canvas();
CanZeife.setSize(CanSize, CanSize);
CanZeife.setBackground(CanColor);
CanZeife.addMouseMotionListener(this);
TfPosX = new TextField("0",4);
TfPosY = new TextField("0",4);
TfPosX.setEditable(false);
TfPosY.setEditable(false);
LaPosX = new Label("X-Pos");
LaPosY = new Label("Y-Pos");
PaCenter = new Panel();
PaEast = new Panel();
PaCanZeife = new Panel();
PaTfPosX = new Panel();
PaTfPosY = new Panel();
PaLaPosX = new Panel();
PaLaPosY = new Panel();
PaPosX = new Panel();
PaPosY = new Panel();
PaTfPosX.add(TfPosX);
PaTfPosY.add(TfPosY);
PaLaPosX.add(LaPosX);
PaLaPosY.add(LaPosY);
PaPosX.setLayout(new GridLayout(2,1));
PaPosX.add(PaLaPosX);
PaPosX.add(PaTfPosX);
PaPosY.setLayout(new GridLayout(2,1));
PaPosY.add(PaLaPosY);
PaPosY.add(PaTfPosY);
PaCenter.add(CanZeife);
PaEast.setLayout(new GridLayout(5,1));
PaEast.add(new Label());
PaEast.add(PaPosX);
PaEast.add(new Label());
PaEast.add(PaPosY);
PaEast.add(new Label());
setLayout(new BorderLayout());
add("Center", PaCenter);
add("East", PaEast);
}
public void MalenMove()
{
Graphics g = CanZeife.getGraphics();
CanZeife.update(g);
MouseY = koord(MouseY);
PxNeu = MouseX + 2*(KegelMitteX-MouseX);
PyNeu = MouseY + 2*(KegelMitteY-MouseY);
kegel(g);
}
public void MalenDrag()
{
Graphics g = CanZeife.getGraphics();
CanZeife.update(g);
MouseY = koord(MouseY);
int XDif = MouseX1-MouseX;
int YDif = MouseY1-MouseY;
MouseX1-=XDif;
MouseY1-=YDif;
PxNeu=PxNeu-XDif;
PyNeu=PyNeu-YDif;
kegel(g);
KegelMitteX-=XDif;
KegelMitteY-=YDif;
}
/// MouseMotionListener
public void mouseDragged(MouseEvent e)
{
MouseX1=MouseX;
MouseY1=MouseY;
auslesen(e);
MalenDrag();
}
public void mouseMoved(MouseEvent e)
{
auslesen(e);
MalenMove();
}
/// MouseMotionListener Ende
public void kegel(Graphics k)
{
k.setColor(new Color(CanColRot,CanColGruen+60,CanColBlau));
neueBreite(MouseX,MouseY,PxNeu,PyNeu);
k.drawLine(MouseX,MouseY,PxNeu,PyNeu);
/*
k.drawLine(MouseX,MouseY,Px2Neu,Py2Neu);
k.drawLine(MouseX,MouseY,Px3Neu,Py3Neu);
*/
}
public int koord(int punkt)
{
punkt=-punkt+CanSize;
return punkt;
}
public void auslesen(MouseEvent e)
{
DecimalFormat dezimal = new DecimalFormat("#0");
MouseX=e.getX();
MouseY=CanSize-e.getY();
String StrMouseX = dezimal.format(MouseX);
String StrMouseY = dezimal.format(MouseY);
TfPosX.setText(StrMouseX);
TfPosY.setText(StrMouseY);
}
public void neueBreite(int x1, int y1, int x2, int y2)
{
int a = (int) Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
int laengeb= (int) ((u*u)-(2*u*a))/((-2*a)+(2*u));
double p, q;
int t1, t2;
int ortoX, ortoY; /// x3, y3
/* DAS HIER IS DIE PUnKTBEREChnUNG!! geht aba nich :(((((
ortoX = -(y2-y1);
ortoY = (x2-x1);
p= ((2*ortoX*x2)+(2*ortoY*y2))/(ortoX+ortoY);
q= (-(laengeb*laengeb)+(x2*x2)+(y2*y2));
t1= (int) (-0.5*p+Math.sqrt(((p*p)/4)-q));
t2= (int) (-0.5*p-Math.sqrt(((p*p)/4)-q));
Px2Neu = x2+t1*(ortoX);
Py2Neu = y2+t1*(ortoY);
Px3Neu = y2+t2*(ortoX);
Py3Neu = y2+t2*(ortoY);
*/
}
}