Browse Source

getting started

master
mortie 7 years ago
parent
commit
aadb7263a6

+ 46
- 0
inf2440/hw4/IntList.java View File

@@ -0,0 +1,46 @@
//fixed 14.01.2017,20.04.2017 am
class IntList{
int [] data;
int len =0;
IntList(int len) {
data = new int[Math.max(2,len)];
}
IntList() {
data = new int[16]; // some default size
}
void add(int elem) {
if (len == data.length) {
int [] b = new int [data.length*2];
System.arraycopy(data,0, b,0,len);
//for (int i = 0; i < len; i++) b[i] = data[i];
data = b;
}
data[len++] = elem;
}// end add
// adds IntList other to this IntList as last part
void append (IntList other) {
if ( len + other.len > data.length) {
int newLen = Math.max(2*len,len + 2*other.len);
int [] b = new int [newLen];
System.arraycopy(data,0,b,0,len);
data = b;
}
System.arraycopy(other.data,0, data, len, other.len);
len += other.len;
} // end join other Intlist to this IntList
void clear(){
len =0;
} // end clear;
int get (int pos){
if (pos > len-1 ) return -1; else return data [pos];
}//end get
int size() {
return len;
}//end size
} // end class IntList

+ 8
- 0
inf2440/hw4/Main.java View File

@@ -0,0 +1,8 @@
class Main {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Usage: java Main <n>");
System.exit(1);
}
}
}

+ 63
- 0
inf2440/hw4/NPunkter17.java View File

@@ -0,0 +1,63 @@
import java.util.Random;
/**
* Class NPunkter17 for aa finne n tilfeldige, ulike punkter i x,y-planet
* ver 7.mai 2015. Reworked to get not cohyll be a square for lage n
************************************************************************/
public class NPunkter17 {
Random r;
int n;
byte [] bitArr;
static int maxXY, xShift =3;
int scaleFactor = 3; // scaleFactor * scaleFactor * n= antall mulige punkter i planet (her: 3*n)
final int [] bitMask ={1,2,4,8,16,32,64,128};
int xCentre =0,yCentre=0, maxVal;
NPunkter17(int n) {
this.n =n;
maxXY = Math.max(10,(int) Math.sqrt(n) * scaleFactor); // største X og Y verdi
while ((1<<xShift) < maxXY) xShift++;
xShift = xShift - 3; // 8 bits per byte
bitArr = new byte[(maxXY<<xShift |(maxXY>>3)) + 1];
r = new Random(123);
// added to get more 'roundish' set of points
for (int i = 1 ; i <=20 ; i++){
xCentre += r.nextInt(maxXY);
yCentre += r.nextInt(maxXY);
}
xCentre /= 20;
yCentre /= 20;
maxVal = (int)(xCentre*1.33);
}
private void setUsed(int x, int y) {
bitArr[(x<<xShift) | (y >>3)] |= bitMask[(y&7)];
}
private boolean used (int x, int y) {
return (bitArr[(x<<xShift) | (y >>3)] & bitMask[y&7]) != 0;
}
public void fyllArrayer(int [] x, int[] y) {
int next =0;
int xval, yval;
// new 2017
while (next < n) {
do{
xval = r.nextInt(maxXY)+1;
yval = r.nextInt(maxXY)+1;
} while (used (xval, yval) ||
Math.abs(xval-xCentre) +Math.abs(yval-yCentre) > maxVal);
x[next] = xval;
y[next] = yval;
setUsed (xval,yval);
next++;
} // next point
}// end fyllArrayer
public IntList lagIntList() {
IntList res = new IntList(n);
for (int i= 0; i <n; i++) res.add(i);
return res;
}// end fyllArrayer
} // end class NPunkter

+ 16
- 0
inf2440/hw4/Oblig4.java View File

@@ -0,0 +1,16 @@
abstract class Oblig4 {
// Required for TegnUt
public int x[];
public int y[];
public int n;
public int MAX_Y;
public int MAX_X;

NPunkter17 points;

Oblig4(NPunkter17 points) {
this.points = points;
}

abstract void solve();
}

+ 5
- 0
inf2440/hw4/Parallel.java View File

@@ -0,0 +1,5 @@
class Parallel extends Oblig4 {
void solve() {
System.out.println("Solving in parallel");
}
}

+ 5
- 0
inf2440/hw4/Sequential.java View File

@@ -0,0 +1,5 @@
class Sequential extends Oblig4 {
void solve() {
System.out.println("Solving sequentially");
}
}

+ 78
- 0
inf2440/hw4/TegnUt.java View File

@@ -0,0 +1,78 @@
import java.util.*;
import javax.swing.*;
import java.awt.*;
/**
* Klasse for aa tegne et punktsett med n punkter (Helst n < 200) og
* den konvekse innhyllinga i IntList CoHull, koordinatene i d.x[] og d.y[]
* ver 7.mai 2015, 2016,2017
******************************************************************************/
class TegnUt extends JFrame{
Oblig4 d;
IntList theCoHull;
int n, MAX_Y;
int [] x,y;
TegnUt(Oblig4 d, IntList CoHull, String s ){
theCoHull = CoHull;
this.d =d;
x = d.x;
y = d.y;
n = d.n;
MAX_Y = d.MAX_Y;
size = 500;
margin = 50;
scale =size/d.MAX_X +0.8;
setTitle("Oblig4, num points:"+n+" "+s);
grafen = new Graph();
getContentPane().add(grafen, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
// angir foretrukket storrelse paa dette lerretet.
setPreferredSize(new Dimension(d.MAX_X+2*margin,d.MAX_Y+2*margin));
}
Graph grafen;
int size , margin;
double scale ;
class Graph extends JPanel {
void drawPoint(int p, Graphics g) {
int SIZE =7;
if (n <= 50) g.drawString(p+"("+x[p]+","+y[p]+")",xDraw(x[p])-SIZE/2,yDraw(y[p])-SIZE/2);
else if (n <= 200)g.drawString(p+"",xDraw(x[p])-SIZE/2,yDraw(y[p])-SIZE/2);
g.drawOval (xDraw(x[p])-SIZE/2,yDraw(y[p])-SIZE/2,SIZE,SIZE);
g.fillOval (xDraw(x[p])-SIZE/2,yDraw(y[p])-SIZE/2,SIZE,SIZE);
}
Graph() {
setPreferredSize(new Dimension(size+2*margin+10,size+2*margin+10));
}
int xDraw(int x){return (int)(x*scale)+ margin ;}
int yDraw(int y){return (int)((MAX_Y-y)*scale+margin);}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
for (int i = 0; i < n; i++){
drawPoint(i,g);
}
g.setColor(Color.red);
// draw cohull
int x2 = x[theCoHull.get(0)], y2 = y[theCoHull.get(0)],x1,y1;
for (int i = 1; i < theCoHull.size(); i++){
y1 = y2; x1=x2;
x2 = x[theCoHull.get(i)];
y2 = y[theCoHull.get(i)];
g.drawLine (xDraw(x1),yDraw(y1), xDraw(x2),yDraw(y2));
}
g.drawLine (xDraw(x[theCoHull.get(theCoHull.size()-1)]),
yDraw(y[theCoHull.get(theCoHull.size()-1)]),
xDraw(x[theCoHull.get(0)]),yDraw(y[theCoHull.get(0)]));
} // end paintComponent
} // end class Graph
}// end class DT

Loading…
Cancel
Save