Professional Documents
Culture Documents
Laborator Geometrie Computationala PDF
Laborator Geometrie Computationala PDF
package prob1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public Problema1(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
nr=new JTextField(2);
xi=new JTextField(3);
yi=new JTextField(3);
adauga=new JButton("Adauga");
adauga.addActionListener(ab);
out=new JTextField(10);
out.setEditable(false);
canvas=new Desen();
1
p2.add(new JLabel("Coord:"));
p2.add(xi);
p2.add(yi);
p1.add(p2);
p2=new JPanel();
p2.add(adauga);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("Output:"));
p2.add(out);
p1.add(p2);
p3.add(p1);
this.add(p3,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema1() --> constructorul "clasei"
if(n>2){
x=new int[n];
y=new int[n];
Problema1.this.canvas.setN(n);
nr.setEnabled(false);
}
}
if(completat){
x[contor]=citesteX();
y[contor]=citesteY();
if(x[contor]==-
Integer.MAX_VALUE){xi.setText(""); return;}
if(y[contor]==-
Integer.MAX_VALUE){yi.setText(""); return;}
xi.setText("");
yi.setText("");
2
//Problema1.this.canvas.deseneazaPunct(x,y,contor);//v1.0b
Problema1.this.canvas.traseazaLinie(x,y,contor);
contor++;
System.out.println(contor);
if(contor==n){
Problema1.this.adauga.setEnabled(false);
Problema1.this.canvas.setOutput(out);
Problema1.this.canvas.inchide();
}
}
}
}//actionPerformed()
3
return n;
}//citesteY()
}//AscultatorButon --> clasa interna
}
package prob1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public Desen(){
setSize(500,500);
x=new int[0];
y=new int[0];
}
g.setColor(Color.BLACK);
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
4
g.drawString("y",calcX(-1),calcY(21));
g.drawLine(calcX(0)+3,calcY(20)+3,calcX(0),calcY(20));
g.drawLine(calcX(0)-3,calcY(20)+3,calcX(0),calcY(20));
for(int i=0;i<c;i++){
g.setColor(Color.blue);
g.fillOval(calcX(x[i])-2,calcY(y[i])-2,5,4);
}
for(int i=1;i<c;i++){
g.setColor(culoare[i-1]);
g.drawLine(calcX(x[i-1]),calcY(y[i-1]),calcX(x[i]),calcY(y[i]));
culoare[i-1]=Color.blue;
}
if(inchis){
g.setColor(culoare[nn-1]);
g.drawLine(calcX(x[0]),calcY(y[0]),calcX(x[c-1]),calcY(y[c-1]));
culoare[nn-1]=Color.blue;
}
g.setColor(Color.red);
if(inchis&&mouse) g.drawLine(mouseX, mouseY, calcX(20),mouseY);
g.setColor(Color.blue);
if ((mouse)&&(inchis)&&(deschis)){
g.setColor(Color.red);
//mouse = false; //v1.0b
//mouseX=calcX(mouseX);//v1.0b
//mouseY=calcY(mouseY);//v1.0b
Mx=(mouseX-250)/10.0;
My=(250-mouseY)/10.0;
System.out.println("paint "+mouseX+" "+mouseY);
g.drawLine(mouseX, mouseY, calcX(20),mouseY);
boolean ok=algoritm();
if(ok){
output.setText("Frontiera");
for(int i=0;i<nn-1;++i)
culoare[i]=Color.blue;
}
else{
if((cc&1)==1) output.setText("Interior");
else output.setText("Exterior");
}
5
deschis=false;
repaint();
}
}//paint()
6
}
for(int i=1;i<c;i++){
if(y[i-1]<y[i]){
xb=x[i];
yb=y[i];
xc=x[i-1];
yc=y[i-1];
}
else{
xb=x[i-1];
yb=y[i-1];
xc=x[i];
yc=y[i];
}
if((yb>My)&&(yc<My)) if ((xb*My+Mx*yc+xc*yb-My*xc-
yc*xb-yb*Mx)>0) { cc++; System.out.println(cc+" cc de la prima "+xb+" "+yb+" "+xc+"
"+yc);culoare[i-1]=Color.cyan;continue;}
if(((xb*My+Mx*yc+xc*yb-My*xc-yc*xb-yb*Mx))==0)
{System.out.println("Frontiera");return true;}
if((yc==My)&&(xc>Mx)) { cc++; culoare[i-
1]=Color.cyan;continue;}
}
if(y[0]<y[nn-1]){
xb=x[nn-1];
yb=y[nn-1];
xc=x[0];
yc=y[0];
}
else{
xb=x[0];
yb=y[0];
xc=x[nn-1];
yc=y[nn-1];
}
if((yb>My)&&(yc<My)) if ((xb*My+Mx*yc+xc*yb-My*xc-yc*xb-
yb*Mx)>0) { cc++; System.out.println(cc+" cc de la doi "+xb+" "+yb+" "+xc+"
"+yc);culoare[nn-1]=Color.cyan;}
if((xb*My+Mx*yc+xc*yb-My*xc-yc*xb-yb*Mx)==0)
{System.out.println("Frontiera");deschis=true;return true;}
if((yc==My)&&(xc>Mx)) { cc++; culoare[nn-1]=Color.cyan;}
7
System.out.println(cc);
deschis=true;
return false;
}//algoritm()
8
Laborator 2
Se dau N puncte in plan, care formeaza un poligon simplu convex. Se cere
localizarea a M puncte in plan (eficient).
package prob2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
ab=new AscultatorButon();
nr=new JTextField(2);
xi=new JTextField(3);
yi=new JTextField(3);
adauga=new JButton("Adauga");
adauga.addActionListener(ab);
out=new JTextField(10);
out.setEditable(false);
canvas=new Desen2();
1
p2=new JPanel();
p2.add(adauga);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("Output:"));
p2.add(out);
p1.add(p2);
p3.add(p1);
this.add(p3,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema2() --> constructorul "clasei"
if(n>3){
x=new int[n];
y=new int[n];
//Problema2.this.canvas.setN(n);
nr.setEnabled(false);
}
}
if(completat){
x[contor]=citesteX();
y[contor]=citesteY();
//if(x[contor]==-
Integer.MAX_VALUE){xi.setText(""); return;}
//if(y[contor]==-
Integer.MAX_VALUE){yi.setText(""); return;}
xi.setText("");
yi.setText("");
//Problema1.this.canvas.deseneazaPunct(x,y,contor);//v1.0b
//Problema1.this.canvas.traseazaLinie(x,y,contor);
contor++;
2
//System.out.println(contor);
if(contor==n){
Algoritm2 a=new
Algoritm2((x[0]+x[1]+x[2])/3.0,(y[0]+y[1]+y[2])/3.0);
for(int i=0;i<x.length;++i)
a.adaugaPunct(x[i],y[i]);
Problema2.this.canvas.setAlgoritm(a);
Problema2.this.adauga.setEnabled(false);
Problema2.this.canvas.setOutput(out);
}
}
}
}//actionPerformed()
3
JOptionPane.showMessageDialog(null,"Dati un numar
valid pt. coordonata axei Y !","Mesaj de eroare",JOptionPane.WARNING_MESSAGE);
}
return n;
}//citesteY()
}
}
package prob2;
import java.util.*;
4
Iterator i=lista.iterator();
int k=1;
while(i.hasNext()) array[k++]=(Punct)(i.next());
array[n+1]=array[1];
array[0]=array[n];
cautareBinara(0,n+1);
Punct[] rez=new Punct[2];
5
if((p1.getX()*gy+gx*p2.getY()+p2.getX()*p1.getY()-
gy*p2.getX()-p2.getY()*p1.getX()-p1.getY()*gx)<0)
ok=true;}
if(ok) cautareBinara(i,nr-1);
else cautareBinara(nr+1,j);
} else {System.out.println((i+j)/2);
int nr=(i+j)/2;
int ll=nr;
//if(nr==array.length-1) ll=1;
punct[it]=ll;}
}
package prob2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
6
public class Desen2 extends Canvas{
public Desen2(){
setSize(500,500);
}
g.setColor(Color.BLACK);
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
if(poli){
for(int i=0;i<x.length;++i) System.out.println(x[i]+" "+y[i]);
for(int i=1;i<x.length;++i)
g.drawLine(calcX(x[i-1]),calcY(y[i-1]),calcX(x[i]),
calcY(y[i]));
g.drawLine(calcX(x[0]),calcY(y[0]),calcX(x[x.length-
1]),calcY(y[x.length-1]));
7
centrux=250+(int)((a.getGX())*10);
centruy=250-(int)((a.getGY())*10);
for(int i=0;i<x.length;++i)
g.drawLine(centrux,centruy,calcX(x[i]),calcY(y[i]));
g.fillOval(centrux-2,centruy-2,5,4);
}
if(mouseSelect){
g.fillOval(mouseX-2,mouseY-2,5,4);
punct=a.cautaBinar(Mx,My);
mouseStart=true;
solutie=true;;
}
if(solutie){
g.setColor(Color.blue);
g.drawLine(calcX((int)(punct[0].getX())),calcY((int)(punct[0].getY())),calcX((int
)(punct[1].getX())),calcY((int)(punct[1].getY())));
g.drawLine(centrux, centruy,
calcX((int)(punct[0].getX())),calcY((int)(punct[0].getY())));
g.drawLine(centrux,
centruy,calcX((int)(punct[1].getX())),calcY((int)(punct[1].getY())));
double
det=punct[1].getX()*My+Mx*punct[0].getY()+punct[0].getX()*punct[1].getY()-
My*punct[0].getX()-punct[0].getY()*punct[1].getX()-punct[1].getY()*Mx;
System.out.println(det);
if(det>0) output.setText("Interior");
if(det<0) output.setText("Exterior");
if(det==0) output.setText("Frontiera");
}
}//paint()
8
public boolean mouseDown(Event e, int x, int y ) {
if(mouseStart){
mouseX=x; mouseY=y;
Mx=(mouseX-250)/10.0;
My=(250-mouseY)/10.0;
mouseSelect=true;
mouseStart=false;
repaint();
}
return true;
}//mouseDown()
package prob2;
public class Punct implements Comparable{
private double x;
private double y;
private int cadran;
private double gx, gy;
9
public Punct(double x, double y, double gx, double gy){
this.x=x;
this.y=y;
this.gx=gx;
this.gy=gy;
calculeazaCadran();
System.out.println(cadran==0?"err cadran":"cadran "+cadran);
}
10
Laborator 3
Se da un PSLG printr-un DCEL. Se cere sa se localizeze un punct (sau mai
multe optim) in acest PSLG.
package prob3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
ab=new AscultatorButon();
canvas=new Desen3();
nr=new JTextField(2);
xi=new JTextField(3);
yi=new JTextField(3);
xj=new JTextField(3);
yj=new JTextField(3);
f1=new JTextField(3);
f2=new JTextField(3);
pp1=new JTextField(3);
pp2=new JTextField(3);
adauga=new JButton("Adauga");
adauga.addActionListener(ab);
out=new JTextField(10);
out.setEditable(false);
1
p2.add(nr);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("V1:"));
p2.add(xi);
p2.add(yi);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("V2:"));
p2.add(xj);
p2.add(yj);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("F:"));
p2.add(f1);
p2.add(f2);
p1.add(p2);
p2=new JPanel();
p2.add(new JLabel("P:"));
p2.add(pp1);
p2.add(pp2);
p1.add(p2);
p2=new JPanel();
p2.add(adauga);
p1.add(p2);
/***
p2=new JPanel();
p2.add(new JLabel("Output:"));
p2.add(out);
p1.add(p2);
***/
p3.add(p1);
this.add(p3,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema3() --> constructorul "clasei"
2
if(e.getSource()==adauga){
if(!completat){
try{
n=Integer.parseInt(nr.getText());
if(n!=0) throw new NumberFormatException();
completat=true;
}catch(NumberFormatException nfe)
{JOptionPane.showMessageDialog(null,"Dati un numar de puncte valid!","Mesaj de
eroare",JOptionPane.WARNING_MESSAGE);}
if(n==0){
x=new int[n];
y=new int[n];
x1=new int[n];
y1=new int[n];
vp1=new int[n];
vp2=new int[n];
vf1=new int[n];
vf2=new int[n];
muchie=new Muchie[18];
puncte=new TreeSet();
nr.setEnabled(false);
//Muchie[] muchie=new
Muchie[18];
p=new Punct3[12];
p[0]=new Punct3(5,-10);
p[1]=new Punct3(-1,-9);
p[2]=new Punct3(7,-6);
p[3]=new Punct3(3,-5);
p[4]=new Punct3(-10,-4);
p[5]=new Punct3(-8,1);
p[6]=new Punct3(2,3);
p[7]=new Punct3(-15,5);
p[8]=new Punct3(1,7);
p[9]=new Punct3(-3,8);
p[10]=new Punct3(8,10);
p[11]=new Punct3(1,12);
//Punct3[12]=new Punct3(,);
//Punct3[13]=new Punct3(,);
muchie[0]=new Muchie(
1,
new Punct3(-15,5),
new Punct3(-3,8),
0,
1,
3
3,
13
)
;
muchie[1]=new Muchie(
2,
new Punct3(1,7),
new Punct3(8,10),
2,
5,
16,
15
)
;
muchie[2]=new Muchie(
3,
new Punct3(-10,-4),
new Punct3(-15,5),
0,
1,
4,
1
)
;
muchie[3]=new Muchie(
4,
new Punct3(-1,-9),
new Punct3(-10,-4),
0,
4,
12,
17
)
;
muchie[4]=new Muchie(
5,
new Punct3(-1,-9),
new Punct3(3,-5),
4,
7,
4,
14
)
;
muchie[5]=new Muchie(
4
6,
new Punct3(2,3),
new Punct3(-3,8),
3,
2,
8,
7
)
;
muchie[6]=new Muchie(
7,
new Punct3(-3,8),
new Punct3(1,12),
0,
2,
1,
18
)
;
muchie[7]=new Muchie(
8,
new Punct3(5,-10),
new Punct3(2,3),
3,
6,
14,
9
)
;
muchie[8]=new Muchie(
9,
new Punct3(7,-6),
new Punct3(2,3),
6,
5,
10,
16
)
;
muchie[9]=new Muchie(
10,
new Punct3(5,-10),
new Punct3(7,-6),
6,
0,
8,
5
15
)
;
muchie[10]=new Muchie(
11,
new Punct3(3,-5),
new Punct3(-8,1),
4,
3,
5,
13
)
;
muchie[11]=new Muchie(
12,
new Punct3(5,-10),
new Punct3(-1,-9),
0,
7,
10,
5
)
;
muchie[12]=new Muchie(
13,
new Punct3(-8,1),
new Punct3(-3,8),
1,
3,
14,
11
)
;
muchie[13]=new Muchie(
14,
new Punct3(5,-10),
new Punct3(3,-5),
7,
3,
12,
5
)
;
muchie[14]=new Muchie(
15,
new Punct3(7,-6),
6
new Punct3(8,10),
5,
0,
9,
18
)
;
muchie[15]=new Muchie(
16,
new Punct3(2,3),
new Punct3(1,7),
2,
5,
6,
2
)
;
muchie[16]=new Muchie(
17,
new Punct3(-10,-4),
new Punct3(-8,1),
1,
4,
3,
11
)
;
muchie[17]=new Muchie(
18,
new Punct3(8,10),
new Punct3(1,12),
2,
0,
2,
7
)
;
}
}
/*if(completat){
x[contor]=citesteX();
y[contor]=citesteY();
x1[contor]=citesteX1();
y1[contor]=citesteY1();
vf1[contor]=citesteF1();
7
vf2[contor]=citesteF2();
vp1[contor]=citesteP1();
vp2[contor]=citesteP2();
puncte.add(new Punct3(x[contor],y[contor]));
puncte.add(new Punct3(x1[contor],y1[contor]));
muchie[contor]=new Muchie(contor,new
Punct3(x[contor],y[contor]),new Punct3(x1[contor],y1[contor]),vf1[contor],
vf2[contor],vp1[contor],vp2[contor]);
//if(x[contor]==-
Integer.MAX_VALUE){xi.setText(""); return;}
//if(y[contor]==-
Integer.MAX_VALUE){yi.setText(""); return;}
xi.setText("");
yi.setText("");
xj.setText("");
yj.setText("");
f1.setText("");
f2.setText("");
pp1.setText("");
pp2.setText("");
//Problema1.this.canvas.deseneazaPunct(x,y,contor);//v1.0b
//Problema1.this.canvas.traseazaLinie(x,y,contor);
contor++;
//System.out.println(contor);
*/
if(contor==n){
ArrayList al=new ArrayList(puncte);
Object[] ob=al.toArray();
Punct3[] punct=new Punct3[ob.length];
for(int k=0;k<ob.length;++k)
punct[k]=(Punct3)ob[k];
Algoritm3 a=new Algoritm3(p, muchie);
Problema3.this.canvas.setAlgoritm(a);
Problema3.this.adauga.setEnabled(false);
Problema3.this.canvas.setOutput(out);
//}
}
}
}//actionPerformed()
8
boolean ok=true;
int n=-Integer.MAX_VALUE;
while(ok)
try{
ok=false;
n=Integer.parseInt(xi.getText());
if(n<-20) throw new NumberFormatException();
if(n>+20) throw new NumberFormatException();
}catch(NumberFormatException nfe){
ok=false;
JOptionPane.showMessageDialog(null,"Dati un numar valid pt.
coordonata axei X !","Mesaj de eroare",JOptionPane.WARNING_MESSAGE);
}
return n;
}//citesteX()
9
}
return n;
}//citesteX1()
10
if(n>+20) throw new NumberFormatException();
}catch(NumberFormatException nfe){
ok=false;
JOptionPane.showMessageDialog(null,"Dati un numar
valid pt. coordonata axei Y !","Mesaj de eroare",JOptionPane.WARNING_MESSAGE);
}
return n;
}//citesteF2()
11
Algoritmul pt. problema 3
package prob3;
import java.util.*;
private Punct3[] a;
private Muchie[] dcel;
private List matura; //maturatorul
private List[] Lm; //lista de stari de slavare a starii maturei
private Object[] lespede;
private double x,y;
private Muchie mBin;
public Algoritm3(Punct3[] a,Muchie[] dcel){
this.a=a;
this.dcel=dcel;
Arrays.sort(a);
interschimba();
listeaza();
matura();
}
/***
private void sorteaza(){
for(int i=0;i<a.length-1;++i)
for(int j=i+1;j<a.length;++j){
if(a[i].getY()>a[j].getY()){
Punct3 aux;
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
}
***/
12
TreeSet c=new TreeSet();
TreeSet b=new TreeSet();
for(int j=0;j<dcel.length;++j){
if(((dcel[j].getV1()).compareTo(a[i]))==0) c.add(dcel[j]);
if(((dcel[j].getV2()).compareTo(a[i]))==0) b.add(dcel[j]);
}
Iterator it=c.iterator();
System.out.print("+"+(i+1)+"\t:");
while(it.hasNext()) System.out.print("
"+((Muchie)(it.next())).getNr());
System.out.println();
a[i].setC(c);
it=b.iterator();
System.out.print("-"+(i+1)+"\t:");
while(it.hasNext()) System.out.print("
"+((Muchie)(it.next())).getNr());
System.out.println();
a[i].setB(b);
}
}
while(itc.hasNext()){
Muchie mc=(Muchie)(itc.next());
if(!matura.contains(mc)){
matura.add(poz++,mc);
}
}
}
}
13
Lm[i]=new ArrayList(matura);
}
14
)
cautaBinar(mijloc+1,d);
else cautaBinar(s,mijloc-1);
}
else{
mBin=((Muchie)(lespede[mijloc]));
}
}
public double calcDet(double x1,double y1, double x2, double y2, double x3,
double y3){
return x1*y2+x2*y3+x3*y1-y2*x3-y3*x1-y1*x2;
}
package prob3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.awt.Graphics2D.*;
import java.awt.geom.*;
15
public Desen3(){
setSize(500,500);
}
//desenze poligonul
if(drawPoli){
Muchie[] dcel=a.getDCEL();
for(int i=0;i<dcel.length;++i){
g2.drawLine(calcX((int)dcel[i].getV1().getX()),
calcY((int)dcel[i].getV1().getY()),
calcX((int)dcel[i].getV2().getX()),
calcY((int)dcel[i].getV2().getY())
);
int
mijlocX=(calcX((int)dcel[i].getV1().getX())+calcX((int)dcel[i].getV2().getX()))/2;
int
mijlocY=(calcY((int)dcel[i].getV1().getY())+calcY((int)dcel[i].getV2().getY()))/2;
g2.fillOval(calcX((int)dcel[i].getV1().getX()),calcY((int)dcel[i].getV1().getY()),3
,3);
16
g2.fillOval(calcX((int)dcel[i].getV2().getX()),calcY((int)dcel[i].getV2().getY()),3
,3);
double mX=(dcel[i].getV1().getX()+dcel[i].getV2().getX())/2.0;
double mY=(dcel[i].getV1().getY()+dcel[i].getV2().getY())/2.0;
double mmX=mX;
double mmY=mY;
double mp1X=mX-0.3;
double mp1Y=mY-0.3;
double mp2X=mX+0.3;
double mp2Y=mY-0.3;
double inclinare=0d;
if(dcel[i].getV1().getX()<dcel[i].getV2().getX()) inclinare=-
Math.PI/2;
else inclinare=Math.PI/2;
g2.setColor(Color.red);
//double teta=(Math.sqrt(Math.pow(dcel[i].getV1().getX()-
mX,2)+Math.pow(dcel[i].getV1().getY()-
mY,2)))/(Math.sqrt(Math.pow(dcel[i].getV1().getY()-mY,2)));
double
cosu=Math.sqrt(Math.cos(Math.pow(dcel[i].getV1().getY()-
mY,2)))/Math.sqrt((Math.pow(dcel[i].getV1().getX()-mX,2)));
double tangenta=(dcel[i].getV2().getY()-
dcel[i].getV1().getY())/(dcel[i].getV2().getX()-dcel[i].getV1().getX());
double teta=Math.atan(tangenta)+inclinare;
AffineTransform at = new AffineTransform();
mX-=mp1X;
mY-=mp1Y;
at.rotate(teta,mX,mY);
17
g2.drawLine(mijlocX,mijlocY,calcX(newX),calcY(newY));
mmX-=mp2X;
mmY-=mp2Y;
at1.rotate(teta,mmX,mmY);
newX = at1.getTranslateX();
newY = at1.getTranslateY();
newX+=mp2X;
newY+=mp2Y;
g2.drawLine(mijlocX,mijlocY,calcX(newX),calcY(newY));
// g2.drawLine(mijlocX,mijlocY,mijlocX+3,mijlocY+3);
// g2.drawLine(mijlocX,mijlocY,mijlocX-3,mijlocY+3);
g2.drawString(""+dcel[i].getNr(),mijlocX+2,mijlocY+2);
g2.setColor(Color.black);
}
}
if(mouseSelect){
g.setColor(Color.blue);
g.fillOval(mouseX,mouseY,1,1);
g.drawLine(mouseX+2,mouseY-2,mouseX-2,mouseY+2);
g.drawLine(mouseX-2,mouseY-2,mouseX+2,mouseY+2);
Muchie[] dcel=a.getDCEL();
for(int i=0;i<dcel.length;++i){
if((dcel[i].getF1()==F)||(dcel[i].getF2()==F))
g.drawLine(calcX((int)dcel[i].getV1().getX()),
calcY((int)dcel[i].getV1().getY()),
calcX((int)dcel[i].getV2().getX()),
calcY((int)dcel[i].getV2().getY())
);
}
}
g.drawString("( "+MMMx+","+MMMy+" )",MMx,MMy);
18
//centrux=250+(int)((a.getGX())*10);
// centruy=250-(int)((a.getGY())*10);
}//paint()
19
this.a=a;
drawPoli=true;
mouseStart=true;
repaint();
}
public double calcDet(double x1,double y1, double x2, double y2, double x3,
double y3){
return x1*y2+x2*y3+x3*y1-y2*x3-y3*x1-y1*x2;
}
package prob3;
import java.util.*;
public class Punct3 implements Comparable{
20
public int compareTo(Object o){
if(y>((Punct3)o).getY()) return 255;
if((y==((Punct3)o).getY())&&(x==((Punct3)o).getX())) return 0;
return -256;
}
package prob3;
public class Muchie implements Comparable{
private int nr,f1,f2,p1,p2;
private Punct3 v1,v2;
public Muchie(int nr, Punct3 v1, Punct3 v2, int f1, int f2, int p1, int p2){
this.nr=nr;
this.v1=v1;
this.v2=v2;
this.f1=f1;
this.f2=f2;
this.p1=p1;
this.p2=p2;
}
21
}
f1=f1+f2;
f2=f1-f2;
f1=f1-f2;
p1=p1+p2;
p2=p1-p2;
p2=p1-p2;
}
}
22
Laborator 4
Se dau N puncte in plan. Se da un dreptunghi prin 2 puncte A si C. Se cere sa
se spuna cate puncte se afla in interiorul dreptunghiului si care sunt. Varianta
neoptimizata pentru mai multe dreptunghiuri.
package prob4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public Problema4(){
//this.setLayout(new BorderLayout());
JPanel p1=new JPanel();
canvas=new Desen4();
//p1.add(canvas);
this.add(canvas);
package prob4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
1
private Vector b;
public Desen4(){
setSize(501,501);
mousePrim=true;
x=new Vector();
y=new Vector();
x1=new Vector();
y1=new Vector();
b=new Vector();
System.out.println("Aci");
this.enableEvents(MouseEvent.MOUSE_CLICKED);
//b=new boolean[100];
}
public void paint(Graphics g){
//trasez chenarul
g.setColor(Color.BLACK);
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
//scriem punctele
for(int i=0;i<x.size();i++)
g.fillOval(((Integer)(x.elementAt(i))).intValue()-2,
((Integer)(y.elementAt(i))).intValue()-2,4,4);
g.setColor(Color.red);
//scriem punctele dreptunghilui
for(int i=0;i<x1.size();i++)
//g.f
g.fillOval(((Integer)(x1.elementAt(i))).intValue()-2,
((Integer)(y1.elementAt(i))).intValue()-2,4,4);
2
if(x1.size()==4){
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue());
g.drawLine( ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue(), ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue());
g.setColor(Color.RED);
System.out.println(b.size());
for(int i=0;i<x.size();i++)
if (((String)(b.elementAt(i))).equals("true"))
g.drawOval(((Integer)(x.elementAt(i))).intValue()-2,
((Integer)(y.elementAt(i))).intValue()-2,4,4);
if(nr==1) g.drawString("Este un punct",240,440);
else g.drawString("Sunt "+nr+" puncte",240,440);
nr=0;
contor=0;
x1=new Vector();
y1=new Vector();
b=new Vector();
mousePrim=false;
}
}//paint()
3
if((mousePrim) && (e.getButton()==MouseEvent.BUTTON1) &&
(e.getID()==MouseEvent.MOUSE_CLICKED)){
contor++;
//if(contor%3==0){
System.out.println("DA");
int mouseX=e.getX();
int mouseY=e.getY();
mx=(mouseX-250)/10.0;
my=(250-mouseY)/10.0;
this.x.add(mouseX);
this.y.add(mouseY);
//}
}
else
{
if((e.getButton()==MouseEvent.BUTTON3) &&
(e.getID()==MouseEvent.MOUSE_CLICKED)){
mousePrim=false;
System.out.println("apasat mouse 2");
}
}
if((mousePrim==false) && (e.getButton()==MouseEvent.BUTTON1) &&
(e.getID()==MouseEvent.MOUSE_CLICKED) ){
contor++;
//if(contor%3==0){
int mouseX=e.getX();
int mouseY=e.getY();
mx=(mouseX-250)/10.0;
my=(250-mouseY)/10.0;
contor=x1.size();
System.out.println(contor);
x1.add(mouseX);
y1.add(mouseY);
if(x1.size()==2){
mx=Math.max(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1
))).intValue());
my=Math.min(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1)
)).intValue());
x1.add((int)mx);
y1.add((int)my);
mx=Math.min(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1)
)).intValue());
4
my=Math.max(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1
))).intValue());
x1.add((int)mx);
y1.add((int)my);
if(((Integer)(x1.elementAt(0))).intValue()>
((Integer)(x1.elementAt(1))).intValue() ) {
Object o=x1.elementAt(0);
x1.setElementAt(x1.elementAt(1),0);
x1.setElementAt(o,1);
o=y1.elementAt(0);
y1.setElementAt(y1.elementAt(1),0);
y1.setElementAt(o,1);
//b=new boolean[x.size()];
}
algoritm();
}
//}
}
repaint();
//return true;
}//mouseDown()
}
}
5
Laborator 5
Se da un PSLG printr-un DCEL. Sa se localizeze M puncte in PSLG (optim)
prin Metoda Lantului.
package prob5;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public Problema5(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
canvas=new Desen5();
adauga=new JButton("Citeste");
adauga.addActionListener(ab);
fisier=new JTextField(10);
fisier.setText("prob5.txt");
JPanel p=new JPanel();
JPanel p3=new JPanel(new GridLayout(2,1));
JPanel p1=new JPanel();
p1.add(adauga);
JPanel p2=new JPanel();
p2.add(fisier);
p3.add(p1);
p3.add(p2);
p.add(p3);
this.add(p,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema3() --> constructorul "clasei"
1
String s=fisier.getText();
p=new TreeSet();
m=new TreeSet();
try{
StreamTokenizer st=new StreamTokenizer(new
BufferedReader(new FileReader(s)));
st.nextToken(); nrM=(int)st.nval;
for(int i=0;i<nrM;++i){
st.nextToken(); int x=(int)st.nval;
st.nextToken(); int y=(int)st.nval;
Punct5 punct1=new Punct5(x,y);
p.add(punct1);
st.nextToken(); int x1=(int)st.nval;
st.nextToken(); int y1=(int)st.nval;
Punct5 punct2=new Punct5(x1,y1);
p.add(punct2);
st.nextToken(); int f1=(int)st.nval;
st.nextToken(); int f2=(int)st.nval;
st.nextToken(); int pp1=(int)st.nval;
st.nextToken(); int pp2=(int)st.nval;
m.add(new Muchie5(i,
punct1,
punct2,
f1,
f2,
pp1,
pp2));
}
}
catch(FileNotFoundException fnfe){
JOptionPane.showMessageDialog(null,"Nu exista acest
fisier!","Mesaj de eroare",JOptionPane.WARNING_MESSAGE);
}
catch(IOException eeee){ System.out.println("Probleme la
introducerea datelor!!!!!!!!!!!!");
}
Punct5[] pp=new Punct5[p.size()];
System.out.println("Numarul de puncte : "+p.size());
Iterator it=p.iterator();
for(int i=0;i<p.size();++i){
pp[i]=(Punct5)(it.next());
}
Muchie5[] mm=new Muchie5[m.size()];
it=m.iterator();
for(int i=0;i<m.size();++i){
mm[i]=(Muchie5)(it.next());
2
}
Algoritm5 a=new Algoritm5(pp,mm);
canvas.start(a);
}
}
}//actionPerformed()
}
package prob5;
import java.util.*;
private Punct5[] a;
private Muchie5[] dcel;
private List matura; //maturatorul
//private int[] W; //vectorul care retine ponderile muchiilor;
private double x,y;
private Muchie5 mBin;
private ArrayList lantBin;
private ArrayList[] L;
private TreeSet OUT1;
private int mijloc=0;
3
}
}
***/
}
Iterator it=c.iterator();
System.out.print("+"+(i+1)+"\t:");
while(it.hasNext()) System.out.print("
"+((Muchie5)(it.next())).getNr());
System.out.println();
it=b.iterator();
System.out.print("-"+(i+1)+"\t:");
while(it.hasNext()) System.out.print("
"+((Muchie5)(it.next())).getNr());
System.out.println();
4
}
for(int i=1;i<a.length-1;++i){
TreeSet IN=(TreeSet)(a[i].getB());
int wIn=0;
Iterator it=IN.iterator();
while(it.hasNext()){
Muchie5 muchie=(Muchie5)(it.next());
wIn+=muchie.getW();
}
TreeSet OUT=(TreeSet)(a[i].getC());
int wOut=0;
it=OUT.iterator();
while(it.hasNext()){
Muchie5 muchie=(Muchie5)(it.next());
wOut+=muchie.getW();
}
if (wIn>wOut) {
it=OUT.iterator();
Muchie5 muchie=(Muchie5)(it.next());
muchie.setW(1+wIn-wOut);
}
}
for(int i=a.length-1;i>0;--i){
TreeSet IN=(TreeSet)(a[i].getB());
int wIn=0;
Iterator it=IN.iterator();
while(it.hasNext()){
Muchie5 muchie=(Muchie5)(it.next());
wIn+=muchie.getW();
}
TreeSet OUT=(TreeSet)(a[i].getC());
int wOut=0;
it=OUT.iterator();
while(it.hasNext()){
Muchie5 muchie=(Muchie5)(it.next());
wOut+=muchie.getW();
}
5
if (wIn<wOut) {
it=IN.iterator();
Muchie5 muchie=(Muchie5)(it.next());
muchie.setW(muchie.getW()+wOut-wIn);
}
}
L=new ArrayList[nr];
System.out.println("nr= "+nr);
it=OUT.iterator();
int i=-1;
while(it.hasNext()){
Muchie5 muchie=(Muchie5)(it.next());
while(muchie.getW()!=0){
++i;
L[i]=new ArrayList();
Lant(muchie,i);
}
}
System.out.println("+++***---Afisarea lanturilor---***+++");
for(int k=0;k<nr;++k){
System.out.print("start");
Object[] array=L[k].toArray();
for(int j=0;j<array.length;++j) System.out.print(" -->
"+((Muchie5)array[j]).getNr());
System.out.println();
}
}
6
public void Lant(Muchie5 muchie,int i){
L[i].add(muchie);
muchie.setW(muchie.getW()-1);
if(muchie.getV2().compareTo(a[a.length-1])==0) return;
else{
//if(muchie.getW()!=0){
//System.out.println(muchie.getNr());
Punct5 nextPunct=(Punct5)(muchie.getV2());
TreeSet o=(TreeSet)(nextPunct.getC());
//OUT1=(TreeSet)(((Punct5)(muchie.getV2())).getC());
//if (o==null) {
// System.out.println("M-am oprit la
:"+((Punct5)(muchie.getV2())).getX()+" "+((Punct5)(muchie.getV2())).getY());
//}
Iterator it=o.iterator();
Muchie5 muchie1=null;
while(it.hasNext()){
muchie1=(Muchie5)(it.next());
if(muchie1.getW()>0) break;
}
Lant(muchie1,i);
}
}
7
mBin.getV1().getY(),
x,
y,
mBin.getV2().getX(),
mBin.getV2().getY()
)>0)
F=mBin.getF2();
else F=mBin.getF1();
System.out.println(mBin.getNr()+"Numarul muchiei");
return F;
}
8
}
array1[array1.length-1]=((Muchie5)array[array.length-1]).getV2();
Punct5 punctCautat=new Punct5(x,y);
int nr=Math.abs(Arrays.binarySearch(array1,punctCautat));
Muchie5 muchie=null;
if (nr<=1) muchie=(Muchie5)array[0];
if (nr>=array1.length) muchie=(Muchie5)array[array.length-1];
if ((nr>1)&&(nr<array1.length)) muchie=(Muchie5)array[nr-2];
if (calcDet(muchie.getV1().getX(),
muchie.getV1().getY(),
x,
y,
muchie.getV2().getX(),
muchie.getV2().getY())>0) cautaBinar(mijloc+1,d);
else cautaBinar(s,mijloc-1);
}
else {
lantBin=L[mijloc];
System.out.println("mijlocul este"+mijloc);
this.mijloc=mijloc;
}
}
public double calcDet(double x1,double y1, double x2, double y2, double x3,
double y3){
return x1*y2+x2*y3+x3*y1-y2*x3-y3*x1-y1*x2;
}
package prob5;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
9
import java.awt.Graphics2D.*;
import java.awt.geom.*;
import java.util.*;
10
//trasez axa x'
g2.drawLine(calcX(-20),calcY(0),calcX(20),calcY(0));
g2.drawString("x",calcX(21),calcY(-1));
g2.drawLine(calcX(20)-3,calcY(0)-3,calcX(20),calcY(0));
g2.drawLine(calcX(20)-3,calcY(0)+3,calcX(20),calcY(0));
g2.fillOval(calcX((int)dcel[i].getV1().getX())-
2,calcY((int)dcel[i].getV1().getY())-2,4,4);
g2.fillOval(calcX((int)dcel[i].getV2().getX())-
2,calcY((int)dcel[i].getV2().getY())-2,4,4);
double mX=(dcel[i].getV1().getX()+dcel[i].getV2().getX())/2.0;
double mY=(dcel[i].getV1().getY()+dcel[i].getV2().getY())/2.0;
double mmX=mX;
double mmY=mY;
double mp1X=mX-0.3;
double mp1Y=mY-0.3;
double mp2X=mX+0.3;
double mp2Y=mY-0.3;
double inclinare=0d;
11
if(dcel[i].getV1().getX()<dcel[i].getV2().getX()) inclinare=-Math.PI/2;
else inclinare=Math.PI/2;
g2.setColor(Color.red);
//double teta=(Math.sqrt(Math.pow(dcel[i].getV1().getX()-
mX,2)+Math.pow(dcel[i].getV1().getY()-
mY,2)))/(Math.sqrt(Math.pow(dcel[i].getV1().getY()-mY,2)));
double cosu=Math.sqrt(Math.cos(Math.pow(dcel[i].getV1().getY()-
mY,2)))/Math.sqrt((Math.pow(dcel[i].getV1().getX()-mX,2)));
double tangenta=(dcel[i].getV2().getY()-
dcel[i].getV1().getY())/(dcel[i].getV2().getX()-dcel[i].getV1().getX());
double teta=Math.atan(tangenta)+inclinare;
AffineTransform at = new AffineTransform();
mX-=mp1X;
mY-=mp1Y;
at.rotate(teta,mX,mY);
mmX-=mp2X;
mmY-=mp2Y;
at1.rotate(teta,mmX,mmY);
newX = at1.getTranslateX();
newY = at1.getTranslateY();
newX+=mp2X;
newY+=mp2Y;
g2.drawLine(mijlocX,mijlocY,calcX(newX),calcY(newY));
//g2.drawLine(mijlocX,mijlocY,mijlocX+3,mijlocY+3);
//g2.drawLine(mijlocX,mijlocY,mijlocX-3,mijlocY+3);
g2.drawString(""+dcel[i].getNr(),mijlocX+2,mijlocY+2);
12
g2.setColor(Color.black);
}
if(mouseSelect){
g.setColor(Color.blue);
g.fillOval(mouseX,mouseY,1,1);
g.drawLine(mouseX+2,mouseY-2,mouseX-2,mouseY+2);
g.drawLine(mouseX-2,mouseY-2,mouseX+2,mouseY+2);
dcel=a.getDCEL();
for(int i=0;i<dcel.length;++i){
if((dcel[i].getF1()==F)||(dcel[i].getF2()==F))
g.drawLine(calcX((int)dcel[i].getV1().getX()),
calcY((int)dcel[i].getV1().getY()),
calcX((int)dcel[i].getV2().getX()),
calcY((int)dcel[i].getV2().getY())
);
}
/***
if (F==0) {
ArrayList sir3 = a.getUnLant();
g.setColor(Color.YELLOW);
Object[] sir4=sir3.toArray();
for(int d=0;d<sir4.length;++d){
g.drawLine(calcX((int)((Muchie5)sir4[d]).getV1().getX())+2,
calcY((int)((Muchie5)sir4[d]).getV1().getY())+2,
calcX((int)((Muchie5)sir4[d]).getV2().getX())+2,
calcY((int)((Muchie5)sir4[d]).getV2().getY())+2
);
}
} else{
ArrayList[] array=a.getLant();
g.setColor(Color.YELLOW);
Object[] sir1=array[0].toArray();
for(int d=0;d<sir1.length;++d){
g.drawLine(calcX((int)((Muchie5)sir1[d]).getV1().getX())+2,
calcY((int)((Muchie5)sir1[d]).getV1().getY())+2,
calcX((int)((Muchie5)sir1[d]).getV2().getX())+2,
calcY((int)((Muchie5)sir1[d]).getV2().getY())+2
13
);
}
g.setColor(Color.pink);
Object[] sir2=array[1].toArray();
for(int d=0;d<sir2.length;++d){
g.drawLine(calcX((int)((Muchie5)sir2[d]).getV1().getX())-2,
calcY((int)((Muchie5)sir2[d]).getV1().getY())-2,
calcX((int)((Muchie5)sir2[d]).getV2().getX())-2,
calcY((int)((Muchie5)sir2[d]).getV2().getY())-2
);
}
g.setColor(Color.blue);
}
***/ //era prea oribil
}
}
public int calcX(double x){
return (int)(250+x*10);
}//calcX(int x)
package prob6;
import java.util.*;
14
public double getX(){
return x;
}
package prob5;
public class Muchie5 implements Comparable{
private int nr,f1,f2,p1,p2,pondere;
private Punct5 v1,v2;
public Muchie5(int nr, Punct5 v1, Punct5 v2, int f1, int f2, int p1, int p2){
this.nr=nr;
this.v1=v1;
this.v2=v2;
this.f1=f1;
this.f2=f2;
this.p1=p1;
this.p2=p2;
15
}
f1=f1+f2;
16
f2=f1-f2;
f1=f1-f2;
p1=p1+p2;
p2=p1-p2;
p2=p1-p2;
}
17
Laborator 6
Se da N puncte fixe. Si apoi se introduc M Dreptunghiuri. Sa se numere cate
puncte se afla in interiorul dreptunghiului prin Principiul Includerii si Excluderii.
package prob6;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public Problema6(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
canvas=new Desen6();
b1=new JButton("1");
b1.addActionListener(ab);
b2=new JButton("2");
b2.addActionListener(ab);
b3=new JButton("3");
b3.addActionListener(ab);
fisier=new JTextField(10);
fisier.setText("prob5.txt");
fisier.setVisible(false);
JPanel p=new JPanel();
JPanel p3=new JPanel(new GridLayout(2,1));
JPanel p1=new JPanel();
p1.add(b1);
p1.add(b2);
p1.add(b3);
JPanel p2=new JPanel();
p2.add(fisier);
p3.add(p1);
1
p3.add(p2);
p.add(p3);
this.add(p,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema3() --> constructorul "clasei"
package prob6;
import java.util.*;
2
list1.add(aux[i]);
}
3
}
}
System.out.println("Afisare matrice");
for(int i=0;i<mat.length;++i) {
System.out.println();
for(int j=0;j<mat[0].length;++j)
System.out.print(mat[i][j]+"\t");
}
Punct6[] puncte=new Punct6[list2.length];
Iterator it=list1.iterator();
int k=0;
Punct6p[] puncte1=new Punct6p[list2.length];
System.out.println();
while(it.hasNext()) {
Punct6 p=(Punct6)(it.next());
puncte[k]=p;
puncte1[k]=new Punct6p(p.getX(),p.getY());
k++;
System.out.println((k-1)+" -> "+puncte[k-1].getX()+" "+puncte[k-
1].getY());
}
Arrays.sort(puncte1);
int poz=~Arrays.binarySearch(puncte,punct);
int poz1=~Arrays.binarySearch(puncte1,new
Punct6p(punct.getX(),punct.getY()));
4
System.out.println("Punctul : "+punct.getX()+" "+punct.getY()+" poz:
"+poz+" "+poz1);
if(poz<0) {
System.out.println("err "+poz);
poz=~poz;
}
if(poz1<0) {
System.out.println("err "+poz1);
poz1=~poz1;
}
/*
if(poz==0) {
System.out.println("pozitia 0");
return 0;
}
*/
if((poz1==0)||(poz==0)) {
return mat[poz][poz1];
}
int nrc=cautareBinara(0,list2.length-1,puncte[poz-1]);
System.out.println(nrc);
int nr=mat[poz][poz1];
System.out.println("nr de puncte este: "+nr);
if (nr<0) {
System.out.println("Mi-a dat numarul = "+nr);
return -256;
}
return nr;
}
}
package prob6;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
5
private Algoritm6 a;
private double mx,my,min,max;
private int contor=0,nr=0,dragX,dragY;
private Vector x,y,x1,y1,x2,y2;
private boolean hand=false, normal=true,desenat=false,drag=false, resize=false,
dragN=false, dragS=false, dragW=false, dragE=false;
public Desen6(){
al=new ArrayList();
this.enableEvents(MouseEvent.MOUSE_CLICKED);
this.enableEvents(MouseEvent.MOUSE_DRAGGED);
this.enableEvents(MouseEvent.MOUSE_RELEASED);
this.enableEvents(MouseEvent.MOUSE_MOVED);
this.enableEvents(506);
//MouseEvent.MOUSE_PRESSED
setSize(500,500);
x=new Vector();
y=new Vector();
x1=new Vector();
y1=new Vector();
//setCursor(new Cursor(Cursor.HAND_CURSOR));
}
g.setColor(Color.BLACK);
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
6
}
if(x1.size()==1) {
g.setColor(Color.red);
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.setColor(Color.black);
}
if(x1.size()==2) {
g.setColor(Color.red);
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(1))).intValue()-2,((Integer)
(y1.elementAt(1))).intValue()-2,4,4);
g.setColor(Color.black);
}
if(x1.size()==4){
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue());
g.drawLine( ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue(), ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue());
g.setColor(Color.RED);
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(1))).intValue()-2,((Integer)
(y1.elementAt(1))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(2))).intValue()-2,((Integer)
(y1.elementAt(2))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(3))).intValue()-2,((Integer)
(y1.elementAt(3))).intValue()-2,4,4);
//System.out.println(b.size());
int nr1=a.getW(new Punct6(((((Integer) (x1.elementAt(0))).intValue()-
250)/10.0),(250-((Integer)(y1.elementAt(0))).intValue())/10.0));
int nr2=a.getW(new Punct6(((((Integer) (x1.elementAt(1))).intValue()-
250)/10.0),(250-((Integer)(y1.elementAt(1))).intValue())/10.0));
7
int nr3=a.getW(new Punct6(((((Integer) (x1.elementAt(2))).intValue()-
250)/10.0),(250-((Integer)(y1.elementAt(2))).intValue())/10.0));
int nr4=a.getW(new Punct6(((((Integer) (x1.elementAt(3))).intValue()-
250)/10.0),(250-((Integer)(y1.elementAt(3))).intValue())/10.0));
//if(nr==1) g.drawString("Este un punct",240,440);
g.drawString("Sunt "+Math.abs(nr3-nr1-nr2+nr4)+" puncte",240,440);
nr=0;
desenat=true;
contor=0;
x2=x1;
y2=y1;
x1=new Vector();
y1=new Vector();
//mousePrim=false;
}
}
if((!mouseIntroducereDate)&&(e.getButton()==MouseEvent.BUTTON1)) {
contor++;
int mouseX=e.getX();
int mouseY=e.getY();
mx=(mouseX-250)/10.0;
my=(250-mouseY)/10.0;
contor=x1.size();
System.out.println(contor);
x1.add(mouseX);
y1.add(mouseY);
8
if(x1.size()==2) {
mx=Math.max(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1
))).intValue());
my=Math.min(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1)
)).intValue());
x1.add((int)mx);
y1.add((int)my);
mx=Math.min(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1)
)).intValue());
my=Math.max(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1
))).intValue());
x1.add((int)mx);
y1.add((int)my);
if(((Integer)(x1.elementAt(0))).intValue()>
((Integer)(x1.elementAt(1))).intValue() ) {
Object o=x1.elementAt(0);
x1.setElementAt(x1.elementAt(1),0);
x1.setElementAt(o,1);
o=y1.elementAt(0);
y1.setElementAt(y1.elementAt(1),0);
y1.setElementAt(o,1);
//b=new boolean[x.size()];
}
}
System.out.println("aci");
repaint();
}
}
}
9
drag=true;
dragX=e.getX();
dragY=e.getY();
}
}
if((drag)&&(e.getID()==MouseEvent.MOUSE_DRAGGED)){
System.out.println("mous tras "+e.getX()+" "+e.getY());
x1.add(((Integer)(x2.elementAt(0))).intValue()+e.getX()-dragX);
x1.add(((Integer)(x2.elementAt(1))).intValue()+e.getX()-dragX);
x1.add(((Integer)(x2.elementAt(2))).intValue()+e.getX()-dragX);
x1.add(((Integer)(x2.elementAt(3))).intValue()+e.getX()-dragX);
y1.add(((Integer)(y2.elementAt(0))).intValue()+e.getY()-dragY);
y1.add(((Integer)(y2.elementAt(1))).intValue()+e.getY()-dragY);
y1.add(((Integer)(y2.elementAt(2))).intValue()+e.getY()-dragY);
y1.add(((Integer)(y2.elementAt(3))).intValue()+e.getY()-dragY);
x2.setElementAt(x1.elementAt(0),0);
x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(x1.elementAt(2),2);
x2.setElementAt(x1.elementAt(3),3);
y2.setElementAt(y1.elementAt(0),0);
y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(y1.elementAt(2),2);
y2.setElementAt(y1.elementAt(3),3);
dragX=e.getX();
dragY=e.getY();
repaint(500);
} else drag=false;
if((resize)&&(e.getID()==MouseEvent.MOUSE_MOVED)) {
//System.out.println("mous mutat "+e.getX()+" "+e.getY());
int X0=((Integer)(x2.elementAt(0))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int X2=((Integer)(x2.elementAt(2))).intValue();
int X3=((Integer)(x2.elementAt(3))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
int Y1=((Integer)(y2.elementAt(1))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
if((e.getX()>X0)&&(Math.abs(e.getY()-Y0)<5)&&
(e.getX()<X2)&&(Math.abs(e.getY()-Y2)<5)) {
setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragN=true;
10
} else {
dragN=false;
}
if((e.getX()>X3)&&(Math.abs(e.getY()-Y3)<5)&&
(e.getX()<X1)&&(Math.abs(e.getY()-Y1)<5)) {
setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragS=true;
} else {
dragS=false;
}
if((e.getY()>Y0)&&(Math.abs(e.getX()-X0)<5)&&
(e.getY()<Y3)&&(Math.abs(e.getX()-X3)<5)) {
setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragW=true;
} else {
dragW=false;
}
if((e.getY()>Y2)&&(Math.abs(e.getX()-X2)<5)&&
(e.getY()<Y1)&&(Math.abs(e.getX()-X1)<5)) {
setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragE=true;
} else {
dragE=false;
}
if((!dragN)&&(!dragS)&&(!dragW)&&(!dragE)) setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
if((resize)&&(e.getID()==MouseEvent.MOUSE_DRAGGED)) {
if(dragN) {
int X0=((Integer)(x2.elementAt(0))).intValue();
int X2=((Integer)(x2.elementAt(2))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
//x2.setElementAt(X0+e.getX()-dragX,0);
//x2.setElementAt(x1.elementAt(1),1);
//x2.setElementAt(X2+e.getX()-dragX,2);
//x2.setElementAt(x1.elementAt(3),3);
y2.setElementAt(Y0+e.getY()-dragY,0);
11
//y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(Y2+e.getY()-dragY,2);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(((Integer)(x2.elementAt(0))).intValue());
x1.add(((Integer)(x2.elementAt(1))).intValue());
x1.add(((Integer)(x2.elementAt(2))).intValue());
x1.add(((Integer)(x2.elementAt(3))).intValue());
y1.add(((Integer)(y2.elementAt(0))).intValue());
y1.add(((Integer)(y2.elementAt(1))).intValue());
y1.add(((Integer)(y2.elementAt(2))).intValue());
y1.add(((Integer)(y2.elementAt(3))).intValue());
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragN=false;
if(dragS) {
int X3=((Integer)(x2.elementAt(3))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
int Y1=((Integer)(y2.elementAt(1))).intValue();
//x2.setElementAt(X3+e.getX()-dragX,3);
//x2.setElementAt(x1.elementAt(1),1);
//x2.setElementAt(X1+e.getX()-dragX,1);
//x2.setElementAt(x1.elementAt(3),3);
y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(((Integer)(x2.elementAt(0))).intValue());
x1.add(((Integer)(x2.elementAt(1))).intValue());
x1.add(((Integer)(x2.elementAt(2))).intValue());
x1.add(((Integer)(x2.elementAt(3))).intValue());
y1.add(((Integer)(y2.elementAt(0))).intValue());
y1.add(((Integer)(y2.elementAt(1))).intValue());
y1.add(((Integer)(y2.elementAt(2))).intValue());
y1.add(((Integer)(y2.elementAt(3))).intValue());
dragX=e.getX();
12
dragY=e.getY();
repaint(50);
} else dragS=false;
if(dragW) {
int X0=((Integer)(x2.elementAt(0))).intValue();
int X3=((Integer)(x2.elementAt(3))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
x2.setElementAt(X3+e.getX()-dragX,3);
//x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(X0+e.getX()-dragX,0);
//x2.setElementAt(x1.elementAt(3),3);
//y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
//y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(((Integer)(x2.elementAt(0))).intValue());
x1.add(((Integer)(x2.elementAt(1))).intValue());
x1.add(((Integer)(x2.elementAt(2))).intValue());
x1.add(((Integer)(x2.elementAt(3))).intValue());
y1.add(((Integer)(y2.elementAt(0))).intValue());
y1.add(((Integer)(y2.elementAt(1))).intValue());
y1.add(((Integer)(y2.elementAt(2))).intValue());
y1.add(((Integer)(y2.elementAt(3))).intValue());
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragW=false;
if(dragE) {
int X2=((Integer)(x2.elementAt(2))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
int Y1=((Integer)(y2.elementAt(1))).intValue();
x2.setElementAt(X2+e.getX()-dragX,2);
//x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(X1+e.getX()-dragX,1);
//x2.setElementAt(x1.elementAt(3),3);
13
//y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
//y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(((Integer)(x2.elementAt(0))).intValue());
x1.add(((Integer)(x2.elementAt(1))).intValue());
x1.add(((Integer)(x2.elementAt(2))).intValue());
x1.add(((Integer)(x2.elementAt(3))).intValue());
y1.add(((Integer)(y2.elementAt(0))).intValue());
y1.add(((Integer)(y2.elementAt(1))).intValue());
y1.add(((Integer)(y2.elementAt(2))).intValue());
y1.add(((Integer)(y2.elementAt(3))).intValue());
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragE=false;
}
}
public void set(int nr) {
if(nr==1) {
normal=true;
drag=false;
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
hand=false;
}
if(nr==2) {
if(desenat) {
hand=true;
setCursor(new Cursor(Cursor.HAND_CURSOR));
normal=false;
drag=false;
resize=false;
} else JOptionPane.showMessageDialog(null,"Trebuie mai intai sa aveti
desenat un dreptunghi!","Mesaj de eroare",JOptionPane.WARNING_MESSAGE);
}
if(nr==3) {
if(desenat) {
resize=true;
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
hand=false;
normal=false;
}
14
}
}
}
package prob6;
import java.util.*;
15
Laborator 7
Se da N puncte fixe. Si apoi se introduc M Dreptunghiuri. Sa se numere cate
puncte se afla in interiorul dreptunghiului (si care) prin Metoda Arborelui
Bidimensional.
package prob7;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public Problema7(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
canvas=new Desen7();
b1=new JButton("1");
b1.addActionListener(ab);
b2=new JButton("2");
b2.addActionListener(ab);
b3=new JButton("3");
b3.addActionListener(ab);
fisier=new JTextField(10);
fisier.setText("prob5.txt");
fisier.setVisible(false);
1
p2.add(fisier);
p3.add(p1);
p3.add(p2);
p.add(p3);
this.add(p,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}//Problema3() --> constructorul "clasei"
package prob7;
import java.util.*;
2
}
makeBinaryTree();
}
for(int i=0;i<list2.length-1;++i)
for(int j=i;j<list2.length;++j)
if(list2[i].getY()>list2[j].getY()) {
Punct7 auxP=list2[i];
list2[i]=list2[j];
list2[j]=auxP;
}
}
3
public void qSort(int s,int d) {
int i=s;
int j=d;
Punct7 m=list2[(i+j)/2];
Punct7 aux;
do {
while(list2[i].getY()<m.getY()) i++;
while(list2[j].getY()>m.getY()) j--;
if(i<=j) {
aux=list2[i];
list2[i]=list2[j];
list2[j]=aux;
i++;
j--;
}
} while(i<=j);
if(s<j) qSort(s,j);
if(d>i) qSort(i,d);
}
list1[list1.length/2].setS(ordonata(0,list1.length/2-1,0,list2.length-1,b));
b=new boolean[list1.length];
4
for(int i=list1.length/2+1;i<list1.length;++i) {
//if (list1[i].getNr()==i)
b[list1[i].getNr()]=true;
}
list1[list1.length/2].setD(ordonata(list1.length/2+1,list1.length-
1,0,list2.length-1,b));
vf=list1[list1.length/2];
v.add(list1[list1.length/2]);
System.out.println("Varf "+vf.getNr());
if(vf.getD()!=null) System.out.println("Dreapta "+vf.getD().getNr());
if(vf.getS()!=null) System.out.println("Stanga "+vf.getS().getNr());
for(int i=0;i<v.size();++i) {
Punct7 punct=(Punct7)(v.elementAt(i));
System.out.print(i+" "+punct.getNr());
if(punct.getD()!=null) System.out.print(" Dreapta
"+punct.getD().getNr());
if(punct.getS()!=null) System.out.println(" Stanga
"+punct.getS().getNr());
}
}
public Punct7 ordonata(int xa, int ya, int xo, int yo, boolean[] bool) {
Vector aux=new Vector();
for (int i=0;i<list2.length;++i) {
if (bool[list2[i].getNr()]) aux.add(list2[i]);
}
if(aux.size()==0) return null;
Punct7 pct=(Punct7)(aux.elementAt(aux.size()/2));
pct.setType(1001);
int nrr=pct.getNr();
System.out.print("ord: "+nrr+" "+aux.size()+" : ");
for(int i=0;i<aux.size();i++)
System.out.print(((Punct7)(aux.elementAt(i))).getNr()+" ");
System.out.println();
int t=0;
for (int i=0;i<list2.length;++i)
if(list2[i].getNr()==nrr) {
t=i;
break;
}
5
pct.setS(abscisa(xa,ya,xo,t-1,b));
b=new boolean[list2.length];
for(int i=aux.size()/2+1;i<aux.size();++i)
b[((Punct7)(aux.elementAt(i))).getNr()]=true;
pct.setD(abscisa(xa,ya,t+1,yo,b));
v.add(pct);
return pct;
}
public Punct7 abscisa(int xa, int ya, int xo, int yo, boolean[] bool) {
Vector aux=new Vector();
for (int i=0;i<list1.length;++i) {
if (bool[list1[i].getNr()]) aux.add(list1[i]);
}
if(aux.size()==0) return null;
System.out.println(aux.size());
Punct7 pct=(Punct7)(aux.elementAt(aux.size()/2));
pct.setType(1002);
v.add(pct);
int nrr=pct.getNr();
System.out.print("abs: "+nrr+" "+aux.size()+" : ");
for(int i=0;i<aux.size();i++)
System.out.print(((Punct7)(aux.elementAt(i))).getNr()+" ");
System.out.println();
int t=-5;
for (int i=0;i<list1.length;++i)
if(list1[i].getNr()==nrr) {
t=i;
break;
}
pct.setS(ordonata(xa,t-1,xo,yo,b));
b=new boolean[list1.length];
for(int i=aux.size()/2+1;i<aux.size();++i)
b[((Punct7)(aux.elementAt(i))).getNr()]=true;
pct.setD(ordonata(t+1,ya,xo,yo,b));
v.add(pct);
return pct;
6
}
for(int i=0;i<v.size();i++) {
Punct7 punct=(Punct7)(v.elementAt(i));
System.out.println(i+" "+punct.getNr()+" "+punct.getX()+"
"+punct.getY());
c(vf,x1,y1,x2,y2);
return S;
}
public void c(Punct7 pct, double x1,double y1, double x2, double y2) {
double l,r;
double m;
if(pct.getType()==Punct7.V) {
l=x1;
r=x2;
m=pct.getX();
}
else {
l=y2;
7
r=y1;
m=pct.getY();
}
package prob7;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
public Desen7(){
8
al=new ArrayList();
this.enableEvents(MouseEvent.MOUSE_CLICKED);
this.enableEvents(MouseEvent.MOUSE_DRAGGED);
this.enableEvents(MouseEvent.MOUSE_RELEASED);
this.enableEvents(MouseEvent.MOUSE_MOVED);
this.enableEvents(506);
//MouseEvent.MOUSE_PRESSED
setSize(500,500);
x=new Vector();
y=new Vector();
x1=new Vector();
y1=new Vector();
//setCursor(new Cursor(Cursor.HAND_CURSOR));
}
g.setColor(Color.BLACK);
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
Object[] puncte=al.toArray();
for(int i=0;i<puncte.length;++i) {
Punct7 punct=(Punct7)puncte[i];
g.fillOval(calcX(punct.getX())-2, calcY(punct.getY())-2,4,4);
g.drawString("P"+punct.getNr(),calcX(punct.getX())+1,calcY(punct.getY())+1);
}
if(x1.size()==1) {
g.setColor(Color.red);
9
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.setColor(Color.black);
}
if(x1.size()==2) {
g.setColor(Color.red);
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(1))).intValue()-2,((Integer)
(y1.elementAt(1))).intValue()-2,4,4);
g.setColor(Color.black);
}
if(x1.size()==4){
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue());
g.drawLine( ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(0))).intValue(), ((Integer)
(y1.elementAt(0))).intValue(), ((Integer) (x1.elementAt(3))).intValue(), ((Integer)
(y1.elementAt(3))).intValue());
g.drawLine( ((Integer) (x1.elementAt(2))).intValue(), ((Integer)
(y1.elementAt(2))).intValue(), ((Integer) (x1.elementAt(1))).intValue(), ((Integer)
(y1.elementAt(1))).intValue());
g.setColor(Color.RED);
g.fillOval(((Integer) (x1.elementAt(0))).intValue()-2,((Integer)
(y1.elementAt(0))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(1))).intValue()-2,((Integer)
(y1.elementAt(1))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(2))).intValue()-2,((Integer)
(y1.elementAt(2))).intValue()-2,4,4);
g.fillOval(((Integer) (x1.elementAt(3))).intValue()-2,((Integer)
(y1.elementAt(3))).intValue()-2,4,4);
//System.out.println(b.size());
//if(nr==1) g.drawString("Este un punct",240,440);
double xx1=(((Integer) (x1.elementAt(0))).intValue()-250)/10.0;
double xx2=(((Integer) (x1.elementAt(1))).intValue()-250)/10.0;
double yy1=(250-((Integer) (y1.elementAt(0))).intValue())/10.0;
double yy2=(250-((Integer) (y1.elementAt(1))).intValue())/10.0;
Vector auxiliar=a.cauta(xx1, yy1, xx2, yy2);
//mx=(mouseX-250)/10.0;
//my=(250-mouseY)/10.0;
g.drawString(auxiliar.size()+"",10,10);
10
g.setColor(Color.blue);
for(int i=0;i<auxiliar.size();++i) {
g.fillOval(calcX(((Punct7)(auxiliar.elementAt(i))).getX())-
2,calcY(((Punct7)(auxiliar.elementAt(i))).getY())-2,4,4);
}
g.setColor(Color.red);
nr=0;
desenat=true;
contor=0;
x2=x1;
y2=y1;
x1=new Vector();
y1=new Vector();
//mousePrim=false;
}
}
if((!mouseIntroducereDate)&&(e.getButton()==MouseEvent.BUTTON1)) {
contor++;
int mouseX=e.getX();
int mouseY=e.getY();
mx=(mouseX-250)/10.0;
my=(250-mouseY)/10.0;
contor=x1.size();
System.out.println(contor);
11
x1.add(new Integer(mouseX));
y1.add(new Integer(mouseY));
if(x1.size()==2) {
mx=Math.max(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1
))).intValue());
my=Math.min(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1)
)).intValue());
x1.add(new Integer((int)mx));
y1.add(new Integer((int)my));
mx=Math.min(((Integer)(x1.elementAt(0))).intValue(),((Integer)(x1.elementAt(1)
)).intValue());
my=Math.max(((Integer)(y1.elementAt(0))).intValue(),((Integer)(y1.elementAt(1
))).intValue());
x1.add(new Integer((int)mx));
y1.add(new Integer((int)my));
if(((Integer)(x1.elementAt(0))).intValue()>
((Integer)(x1.elementAt(1))).intValue() ) {
Object o=x1.elementAt(0);
x1.setElementAt(x1.elementAt(1),0);
x1.setElementAt(o,1);
o=y1.elementAt(0);
y1.setElementAt(y1.elementAt(1),0);
y1.setElementAt(o,1);
//b=new boolean[x.size()];
}
}
System.out.println("aci");
repaint();
}
}
}
12
(((Integer)(x2.elementAt(3))).intValue()<e.getX())&&
(((Integer)(y2.elementAt(3))).intValue()>e.getY())) {
drag=true;
dragX=e.getX();
dragY=e.getY();
}
}
if((drag)&&(e.getID()==MouseEvent.MOUSE_DRAGGED)){
System.out.println("mous tras "+e.getX()+" "+e.getY());
x1.add(new
Integer(((Integer)(x2.elementAt(0))).intValue()+e.getX()-dragX));
x1.add(new
Integer(((Integer)(x2.elementAt(1))).intValue()+e.getX()-dragX));
x1.add(new
Integer(((Integer)(x2.elementAt(2))).intValue()+e.getX()-dragX));
x1.add(new
Integer(((Integer)(x2.elementAt(3))).intValue()+e.getX()-dragX));
y1.add(new
Integer(((Integer)(y2.elementAt(0))).intValue()+e.getY()-dragY));
y1.add(new
Integer(((Integer)(y2.elementAt(1))).intValue()+e.getY()-dragY));
y1.add(new
Integer(((Integer)(y2.elementAt(2))).intValue()+e.getY()-dragY));
y1.add(new
Integer(((Integer)(y2.elementAt(3))).intValue()+e.getY()-dragY));
x2.setElementAt(x1.elementAt(0),0);
x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(x1.elementAt(2),2);
x2.setElementAt(x1.elementAt(3),3);
y2.setElementAt(y1.elementAt(0),0);
y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(y1.elementAt(2),2);
y2.setElementAt(y1.elementAt(3),3);
dragX=e.getX();
dragY=e.getY();
repaint(500);
} else drag=false;
if((resize)&&(e.getID()==MouseEvent.MOUSE_MOVED)) {
//System.out.println("mous mutat "+e.getX()+" "+e.getY());
int X0=((Integer)(x2.elementAt(0))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int X2=((Integer)(x2.elementAt(2))).intValue();
int X3=((Integer)(x2.elementAt(3))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
13
int Y1=((Integer)(y2.elementAt(1))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
if((e.getX()>X0)&&(Math.abs(e.getY()-Y0)<5)&&
(e.getX()<X2)&&(Math.abs(e.getY()-Y2)<5)) {
setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragN=true;
} else {
dragN=false;
}
if((e.getX()>X3)&&(Math.abs(e.getY()-Y3)<5)&&
(e.getX()<X1)&&(Math.abs(e.getY()-Y1)<5)) {
setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragS=true;
} else {
dragS=false;
}
if((e.getY()>Y0)&&(Math.abs(e.getX()-X0)<5)&&
(e.getY()<Y3)&&(Math.abs(e.getX()-X3)<5)) {
setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragW=true;
} else {
dragW=false;
}
if((e.getY()>Y2)&&(Math.abs(e.getX()-X2)<5)&&
(e.getY()<Y1)&&(Math.abs(e.getX()-X1)<5)) {
setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
dragX=e.getX();
dragY=e.getY();
dragE=true;
} else {
dragE=false;
}
if((!dragN)&&(!dragS)&&(!dragW)&&(!dragE)) setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
if((resize)&&(e.getID()==MouseEvent.MOUSE_DRAGGED)) {
if(dragN) {
int X0=((Integer)(x2.elementAt(0))).intValue();
14
int X2=((Integer)(x2.elementAt(2))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
//x2.setElementAt(X0+e.getX()-dragX,0);
//x2.setElementAt(x1.elementAt(1),1);
//x2.setElementAt(X2+e.getX()-dragX,2);
//x2.setElementAt(x1.elementAt(3),3);
y2.setElementAt(Y0+e.getY()-dragY,0);
//y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(Y2+e.getY()-dragY,2);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(new
Integer(((Integer)(x2.elementAt(0))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(1))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(2))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(3))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(0))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(1))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(2))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(3))).intValue()));
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragN=false;
if(dragS) {
int X3=((Integer)(x2.elementAt(3))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
int Y1=((Integer)(y2.elementAt(1))).intValue();
//x2.setElementAt(X3+e.getX()-dragX,3);
//x2.setElementAt(x1.elementAt(1),1);
//x2.setElementAt(X1+e.getX()-dragX,1);
//x2.setElementAt(x1.elementAt(3),3);
15
y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(new
Integer(((Integer)(x2.elementAt(0))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(1))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(2))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(3))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(0))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(1))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(2))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(3))).intValue()));
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragS=false;
if(dragW) {
int X0=((Integer)(x2.elementAt(0))).intValue();
int X3=((Integer)(x2.elementAt(3))).intValue();
int Y3=((Integer)(y2.elementAt(3))).intValue();
int Y0=((Integer)(y2.elementAt(0))).intValue();
x2.setElementAt(X3+e.getX()-dragX,3);
//x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(X0+e.getX()-dragX,0);
//x2.setElementAt(x1.elementAt(3),3);
//y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
//y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(new
Integer(((Integer)(x2.elementAt(0))).intValue()));
16
x1.add(new
Integer(((Integer)(x2.elementAt(1))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(2))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(3))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(0))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(1))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(2))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(3))).intValue()));
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragW=false;
if(dragE) {
int X2=((Integer)(x2.elementAt(2))).intValue();
int X1=((Integer)(x2.elementAt(1))).intValue();
int Y2=((Integer)(y2.elementAt(2))).intValue();
int Y1=((Integer)(y2.elementAt(1))).intValue();
x2.setElementAt(X2+e.getX()-dragX,2);
//x2.setElementAt(x1.elementAt(1),1);
x2.setElementAt(X1+e.getX()-dragX,1);
//x2.setElementAt(x1.elementAt(3),3);
//y2.setElementAt(Y3+e.getY()-dragY,3);
//y2.setElementAt(y1.elementAt(1),1);
//y2.setElementAt(Y3+e.getY()-dragY,1);
//y2.setElementAt(y1.elementAt(3),3);
x1.add(new
Integer(((Integer)(x2.elementAt(0))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(1))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(2))).intValue()));
x1.add(new
Integer(((Integer)(x2.elementAt(3))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(0))).intValue()));
17
y1.add(new
Integer(((Integer)(y2.elementAt(1))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(2))).intValue()));
y1.add(new
Integer(((Integer)(y2.elementAt(3))).intValue()));
dragX=e.getX();
dragY=e.getY();
repaint(50);
} else dragE=false;
}
}
18
Clasa ajutatoare, Creaza obiecte de tip Punct7
package prob7;
import java.util.*;
19
public int getType() {
return tip;
}
20
Laborator 8
package prob8;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public Problema8(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
JPanel panel=new JPanel (new GridLayout(2,1));
infasoara=new JButton("Infasoara");
infasoara.addActionListener(ab);
panel.add(infasoara);
play=new JButton("Play");
play.addActionListener(ab);
panel.add(play);
play.setVisible(false);
canvas=new Desen8();
this.add(panel1,BorderLayout.WEST);
//JPanel ppp=new JPanel();
//ppp.add(canvas);
this.add(canvas,BorderLayout.CENTER);
}
1
canvas.setStare(1);
System.out.println("AM apasat!");
infasoara.setEnabled(false);
}
else if(e.getSource()==play){
//canvas.set(1);
}
}
}
}
package prob8;
import java.awt.*;
import java.util.*;
2
x1=minx.getX();
x2=miny.getX();
x3=maxy.getX();
y1=minx.getY();
y2=miny.getY();
y3=maxy.getY();
m=new Punct8((int)((x1+x2+x3)/3),(int)((y1+y2+y3)/3));
mm=new Punct8((int)((x1+x2+x3)/3),(int)((y1+y2+y3)/3));
}
3
min=((Punct8) obiecte[i]).getY();
j=i;
}
Object o=obiecte[0];
obiecte[0]=obiecte[j];
obiecte[j]=o;
boolean b=false;
do{
b=true;
for(int i=1; i<obiecte.length; i++){
if( ((Punct8) obiecte[i-1]).compareTo(obiecte[i])<0 ){
Object aux=obiecte[i-1];
obiecte[i-1]=obiecte[i];
obiecte[i]=aux;
b=false;
}
}
}while(b==false);*/
Arrays.sort(obiecte);
System.out.println("Dupa sortare");
for(int i=0;i<obiecte.length; i++) System.out.println((((Punct8)
obiecte[i]).getX()-mTx)+" "+(((Punct8) obiecte[i]).getY()-mTy));
4
Object[] aux=new Object[obiecte.length];
int ll=0;
for(i=max;i<obiecte.length;++i) aux[ll++]=obiecte[i];
for(i=0;i<max;++i) aux[ll++]=obiecte[i];
obiecte=aux;
i=0;
do{
if(i==obiecte.length) i=0;
if(i<=obiecte.length-3)
{det=calcDet(((Punct8)obiecte[i]).getX(),((Punct8)obiecte[i]).getY(),((Punct8)obiecte[i+
1]).getX(),((Punct8)obiecte[i+1]).getY(),((Punct8)obiecte[i+2]).getX(),((Punct8)obiecte[i
+2]).getY()); j=i+1; }
else if(i==obiecte.length-2)
{det=calcDet(((Punct8)obiecte[i]).getX(),((Punct8)obiecte[i]).getY(),((Punct8)obiecte[i+
1]).getX(),((Punct8)obiecte[i+1]).getY(),((Punct8)obiecte[0]).getX(),((Punct8)obiecte[0])
.getY()); j=i+1; l=1;vizitat=true; }
else if(i==obiecte.length-1)
{det=calcDet(((Punct8)obiecte[i]).getX(),((Punct8)obiecte[i]).getY(),((Punct8)obiecte[0])
.getX(),((Punct8)obiecte[0]).getY(),((Punct8)obiecte[1]).getX(),((Punct8)obiecte[1]).get
Y()); j=0; l=2; }//am modificat j=1 cu j=0
//if((l==2)&&(vizitat)) break; //in caz caci ultimul este la mijloc
inseamna ca s-a terminat , dupa ce a fost ultimul :P
if(det<=0){ //am modificat det<0 cu det > 0
//ArrayList oo=new ArrayList();
//for(int k=0;k<obiecte.length;k++) oo.add(obiecte[k]);//in
loc de 1 am pus 0
//oo.remove(obiecte[j]);//nu se cunoaste fenomenul de
egalitate :D
5
if(calcDet(((Punct8)obiecte[i]).getX(),((Punct8)obiecte[i]).getY(),((Punct8)obiect
e[i+1]).getX(),((Punct8)obiecte[i+1]).getY(),((Punct8)obiecte[0]).getX(),((Punct8)obiecte
[0]).getY())<=0) {
Object[] obAux=new Object[obiecte.length-1];
for(int k=0;k<obAux.length;++k) obAux[k]=obiecte[k];
obiecte=new Object[obAux.length];
for(int k=0;k<obAux.length;++k) obiecte[k]=obAux[k];
}
}
public double calcDet(double x1, double y1, double x2, double y2, double x3,
double y3){
x1=(x1+mTx-250)/10.0;
x2=(x2+mTx-250)/10.0;
x3=(x3+mTx-250)/10.0;
y1=(250-y1+mTy)/10.0;
y2=(250-y2+mTy)/10.0;
y3=(250-y3+mTy)/10.0;
//return x1*-y2+x2*-y3+x3*-y1-x3*-y2-x1*-y3-x2*-y1;
return x1*y2+x2*y3+x3*y1-x3*y2-x1*y3-x2*y1;
}
public Punct8 getM() {
return mm;
}
package prob8;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
6
private ArrayList puncte,frontiera;
private Object[] obiecte;
private Vector x,y;
private boolean potIntroducePuncte=true;
private int stare;
public Desen8(){
puncte=new ArrayList();
frontiera=new ArrayList();
x=new Vector();
y=new Vector();
stare=0;
this.setSize(500,500);
this.enableEvents(MouseEvent.MOUSE_CLICKED);
}
g.setColor(Color.BLACK);
//chenarul
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
//desenez punctele
Iterator it=puncte.iterator();
while(it.hasNext()){
Punct8 punct=(Punct8) it.next();
g.fillOval((int)punct.getX()-2, (int)punct.getY()-2,4,4);
}
7
//daca am apasat butonul "Infasoara" (deci starea canvasului este 1)
if( (puncte.size()>=3) && (stare==1) ){
it=puncte.iterator();
while(it.hasNext()){
Punct8 p=(Punct8) it.next();
System.out.println(p.getX()+" - "+p.getY());
}
Algoritm8 a=new Algoritm8(puncte);
//a.sorteaza();
a.infasor();
obiecte=a.frontiera();
if(obiecte.length>2) {
int i;
for(i=1;i<obiecte.length;i++) {
g.drawLine( ((Punct8)obiecte[i-1]).getX(),((Punct8)obiecte[i-
1]).getY(), ((Punct8)obiecte[i]).getX(), ((Punct8)obiecte[i]).getY() );
g.drawString(""+(i-1),((Punct8)obiecte[i-
1]).getX()+1,((Punct8)obiecte[i-1]).getY()+1);
System.out.println(((Punct8)obiecte[i-1]).getX()+" !!!
"+((Punct8)obiecte[i-1]).getY());
}
g.drawLine( ((Punct8)obiecte[i-1]).getX(),((Punct8)obiecte[i-1]).getY(),
((Punct8)obiecte[0]).getX(), ((Punct8)obiecte[0]).getY() );
g.drawString(""+(i-1),((Punct8)obiecte[i-1]).getX()+1,((Punct8)obiecte[i-
1]).getY()+1);
System.out.println(((Punct8)obiecte[i-1]).getX()+" !!! "+((Punct8)obiecte[i-
1]).getY());
//Punct8 M=a.getM();
//g.drawString("M",((Punct8)obiecte[i-1]).getX()+1,((Punct8)obiecte[i-
1]).getY()+1);
//g.fillOval((int)M.getX()-2, (int)M.getY()-2,4,4);
//am modificat stare=3 cu stare=1 pt. a nu disparea conturul
acoperirii convexe
}
else if (stare==1) JOptionPane.showMessageDialog(null,"Desenul
infasuratorii convexe nu este decat o linie dreapta si nu o voi desena :P !","Mesaj de
eroare",JOptionPane.WARNING_MESSAGE);
stare=2;
System.out.println("Gata");
}
8
public int calcX(double x){
return (int)(250+x*10);
}//calcX(int x)
package prob8;
import java.util.*;
9
return y;
}
public int getCadran(){ //sunt schimbari in loc de 0 este 250 si am pus cadranele
corect(ca numere)
if( (x>250) && (y>=250) ) return 4;
else if ( (x>=250) && (y<250) ) return 1;
else if ( (x<=250) && (y>250) ) return 3 ;
else if ( (x<250) && (y<=250) ) return 2 ;
System.out.println("Err");
return 0;
}
10
Laborator 9
Algoritmul Jarvis varianta AKL pt. aflarea infasuratorii convexe.
package prob9;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public Problema9(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
JPanel panel=new JPanel (new GridLayout(2,1));
infasoara=new JButton("Infasoara");
infasoara.addActionListener(ab);
panel.add(infasoara);
play=new JButton("Play");
play.addActionListener(ab);
panel.add(play);
play.setVisible(false);
canvas=new Desen9();
this.add(panel1,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}
1
infasoara.setEnabled(false);
}
else if(e.getSource()==play){
//canvas.set(1);
}
}
}
}
package prob9;
import java.awt.*;
import java.util.*;
2
if(puncte.size()==0) return;
int i=0;
a=(Punct9)puncte.get(0);
b=(Punct9)puncte.get(puncte.size()-1);
nodVizitat[0]=true;
listanord.add(a);
c=a;
System.out.println("Lista Nord");
while(c.compareTo(b)!=0) {
for(int j=i+1;j<puncte.size();++j) {
boolean ok=true;
c=(Punct9)puncte.get(j);
nodVizitat[j]=true;
ok=true;
for(int k=i+1;k<puncte.size();++k) {
d=(Punct9)puncte.get(k);
if(!nodVizitat[k]) if(det()>0) {ok=false;break; };
}
if(ok) {
listanord.add(c);
a=c;
for(int l=i+1;l<j;++l) nodVizitat[l]=true;
i=j;
break;
}
else nodVizitat[j]=false;
}
}
System.out.println("Lista Sud");
i=0;
c=new Punct9(0,0);
d=new Punct9(0,0);
nodVizitat=new boolean[puncte.size()];
//for(int ll=0;ll>nodVizitat.length;++ll) if(nodVizitat[0]==true)
System.exit(0);
a=(Punct9)puncte.get(0);
b=(Punct9)puncte.get(puncte.size()-1);
nodVizitat[0]=true;
listasud.add(a);
c=a;
while(c.compareTo(b)!=0) {
3
for(int j=i+1;j<puncte.size();++j) {
boolean ok=true;
c=(Punct9)puncte.get(j);
nodVizitat[j]=true;
ok=true;
for(int k=i+1;k<puncte.size();++k) {
d=(Punct9)puncte.get(k);
if(!nodVizitat[k]) if(det()<0) {ok=false;break; };
}
if(ok) {
listasud.add(c);
a=c;
for(int l=i+1;l<j;++l) nodVizitat[l]=true;
i=j;
break;
}
else nodVizitat[j]=false;
}
}
}
package prob9;
import javax.swing.*;
4
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
public Desen9(){
puncte=new ArrayList();
frontiera=new ArrayList();
x=new Vector();
y=new Vector();
stare=0;
this.setSize(500,500);
this.enableEvents(MouseEvent.MOUSE_CLICKED);
}
g.setColor(Color.BLACK);
//chenarul
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
//desenez punctele
5
Iterator it=puncte.iterator();
while(it.hasNext()){
Punct9 punct=(Punct9) it.next();
g.fillOval(calcX(punct.getX())-2, calcY(punct.getY())-2,4,4);
}
g.drawString(""+(kNr++),calcX(((Punct9)listanord.get(i)).getX())+1,calcY(((Pun
ct9)listanord.get(i)).getY())+1);
}
//g.drawLine( calcX (((Punct9)listanord.get(listanord.size()-1)).getX() ),
calcY( ((Punct9)listanord.get(listanord.size()-1)).getY() ), calcX(
((Punct9)listanord.get(0)).getX() ), calcY( ((Punct9)listanord.get(0)).getY() ));
ArrayList listasud=a.getListaSud();
for(int i=0;i<listasud.size()-1;i++) {
g.drawLine( calcX( ((Punct9)listasud.get(i)).getX() ), calcY(
((Punct9)listasud.get(i)).getY() ), calcX( ((Punct9)listasud.get(i+1)).getX() ), calcY(
((Punct9)listasud.get(i+1)).getY() ));
g.drawString(""+(kNr++),calcX(((Punct9)listasud.get(i+1)).getX())+1,calcY(((Pu
nct9)listasud.get(i+1)).getY())+1);
}
//g.drawString(""+(kNr++),calcX(((Punct9)listasud.get(listasud.size()-
1)).getX())+1,calcY(((Punct9)listasud.get(listasud.size()-1)).getY())+1);
//g.drawLine( calcX (((Punct9)listasud.get(listasud.size()-1)).getX() ),
calcY( ((Punct9)listasud.get(listasud.size()-1)).getY() ), calcX(
((Punct9)listasud.get(0)).getX() ), calcY( ((Punct9)listasud.get(0)).getY() ));
}
6
}//calcX(int x)
package prob9;
import java.util.*;
7
return y;
}
8
Laborator 10
Algoritmul QuickHull pt. aflarea infasuratorii convexe.
package prob10;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public Problema10(){
this.setLayout(new BorderLayout());
ab=new AscultatorButon();
JPanel panel=new JPanel (new GridLayout(2,1));
infasoara=new JButton("Infasoara");
infasoara.addActionListener(ab);
panel.add(infasoara);
play=new JButton("Play");
play.addActionListener(ab);
panel.add(play);
play.setVisible(false);
canvas=new Desen10();
this.add(panel1,BorderLayout.WEST);
this.add(canvas,BorderLayout.CENTER);
}
1
infasoara.setEnabled(false);
}
else if(e.getSource()==play){
//canvas.set(1);
}
}
}
}
package prob10;
import java.awt.*;
import java.util.*;
private TreeSet s;
private TreeSet al;
private Punct10 l,r;
2
al.add(s.first());
al.add(s.last());
return s; }
else{
double det=-10000;
Punct10 h=new Punct10(0,0);
Iterator i=s.iterator();
while(i.hasNext()){
Punct10 p=(Punct10)i.next();
if(getDet(l,r,p)>det) {det=Math.abs(getDet(l,r,p)); h=p;}
if(getDet(l,r,p)==det) if(p.getX()<h.getX()) { h=p;}
}
TreeSet s1=new TreeSet();
TreeSet s2=new TreeSet();
s1.add(l);
s1.add(h);
s2.add(r);
s2.add(h);
i=s.iterator();
while(i.hasNext()){
Punct10 p=(Punct10) i.next();
if(getDet(l,h,p)>0) s1.add(p);
if(getDet(h,r,p)>0) s2.add(p);
}
TreeSet ss=new TreeSet();
ss.addAll(qHull(s1,l,h));
ss.addAll(qHull(s2,h,r));
ss.remove(h);
return ss;
}
}
3
Suprafata de desen pentru problema 10
package prob10;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
public Desen10(){
puncte=new ArrayList();
frontiera=new ArrayList();
x=new Vector();
y=new Vector();
stare=0;
this.setSize(500,500);
this.enableEvents(MouseEvent.MOUSE_CLICKED);
}
g.setColor(Color.BLACK);
//chenarul
g.drawLine(0,0,500,0);
g.drawLine(0,0,0,500);
g.drawLine(500,0,500,500);
g.drawLine(0,500,500,500);
4
g.drawLine(calcX(0),calcY(-20),calcX(0),calcY(20));
g.drawString("y",calcX(-1),calcY(21));
g.drawLine(calcX(0)+3,calcY(20)+3,calcX(0),calcY(20));
g.drawLine(calcX(0)-3,calcY(20)+3,calcX(0),calcY(20));
//desenez punctele
Iterator it=puncte.iterator();
while(it.hasNext()){
Punct10 punct=(Punct10) it.next();
g.fillOval(calcX(punct.getX())-2, calcY(punct.getY())-2,4,4);
}
g.drawString(""+(kNr++),calcX(((Punct10)listanord.get(i)).getX())+1,calcY(((Punct10)li
stanord.get(i)).getY())+1);
}
g.drawLine( calcX (((Punct10)listanord.get(listanord.size()-1)).getX() ),
calcY( ((Punct10)listanord.get(listanord.size()-1)).getY() ), calcX(
((Punct10)listanord.get(0)).getX() ), calcY( ((Punct10)listanord.get(0)).getY() ));
g.drawString(""+(kNr++),calcX(((Punct10)listanord.get(listanord.size()-
1)).getX())+1,calcY(((Punct10)listanord.get(listanord.size()-1)).getY())+1);
}
5
public void setStare(int tip){
stare=tip;
}
package prob10;
import java.util.*;
6
public void setY(int y){
this.y=y;
}