structure

This commit is contained in:
DonRenando
2017-01-18 15:22:18 +01:00
parent 26e681792e
commit 5bb2fd30d4
24 changed files with 21 additions and 0 deletions

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="ivy-java-1.2.17" level="project" />
</component>
</module>

Binary file not shown.

93
Geste/src/Fenetre.java Normal file
View File

@ -0,0 +1,93 @@
import fr.dgac.ivy.IvyException;
import model.Forme;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
/**
* Created by renando on 16/01/17.
*/
class Fenetre extends JFrame {
private ivyTranslater monIvy;
//private Automate a;
Fenetre(Panel panel) {
super("IHM TP Lines");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel panel1 = panel;
this.add(panel);
try {
this.monIvy = new ivyTranslater();
} catch (IvyException e) {
e.printStackTrace();
}
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent mouseEvent) {
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
if (SwingUtilities.isLeftMouseButton(mouseEvent))
panel.getStroke().addPoint(mouseEvent.getX(), mouseEvent.getY());
panel.stroke = new Stroke();
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
if (!panel.getStroke().isEmpty()) {
panel.getStroke().normalize();
String result = Reconnaissance.comparaison(Reconnaissance.reconnaissance(panel.getStroke(), Forme.ROND.split(";")),
Reconnaissance.reconnaissance(panel.getStroke(), Forme.CARRE.split(";")),
Reconnaissance.reconnaissance(panel.getStroke(), Forme.TRAIT.split(";")),
Reconnaissance.reconnaissance(panel.getStroke(), Forme.Z.split(";")));
System.out.println(result);
monIvy.sendMsg("Geste forme=" + result);
}
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
}
});
panel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent mouseEvent) {
if (SwingUtilities.isLeftMouseButton(mouseEvent))
panel.getStroke().addPoint(mouseEvent.getX(), mouseEvent.getY());
panel.repaint();
}
@Override
public void mouseMoved(MouseEvent mouseEvent) {
}
});
setSize(600, 600);
setVisible(true);
}
}

10
Geste/src/Main.java Normal file
View File

@ -0,0 +1,10 @@
/**
* Created by renando on 18/01/17.
*/
public class Main {
public static void main(String[] args) {
Panel panel = new Panel();
new Fenetre(panel);
}
}

40
Geste/src/Panel.java Normal file
View File

@ -0,0 +1,40 @@
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Point2D;
/**
* Created by renando on 16/01/17.
*/
public class Panel extends JComponent {
public Stroke stroke;
public Panel() {
super();
stroke = new Stroke();
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g2 = (Graphics2D) graphics;
for (Point2D.Double p : stroke.getPoints()) {
int x = (int) p.getX();
int y = (int) p.getY();
g2.drawOval(x, y, 2, 2);
}
}
public Stroke getStroke() {
return stroke;
}
public void setStroke(Stroke stroke) {
this.stroke = stroke;
}
}

View File

@ -0,0 +1,67 @@
import java.awt.geom.Point2D;
/**
* Created by renando on 18/01/17.
*/
public class Reconnaissance {
public static int reconnaissance(Stroke listePoint, String[] listeCoor) {
listePoint.normalize();
int result = 0;
int cpt = 0;
for (Point2D.Double point : listePoint.getPoints()) {
String x;
String y;
x = listeCoor[cpt].split(",")[0];
y = listeCoor[cpt].split(",")[1];
Double x1 = Double.parseDouble(x);
Double y1 = Double.parseDouble(y);
String x2 = String.valueOf(point.getX());
String y2 = String.valueOf(point.getY());
Double x3 = Double.parseDouble(x2);
Double y3 = Double.parseDouble(y2);
result += (int) Math.sqrt((Math.pow(x1 - x3, 2) + Math.pow(y1 - y3, 2)));
cpt++;
}
System.out.println(result);
return result;
}
public static String comparaison(int rond, int carre, int trait, int z) {
String result = null;
if(!isCorrect(rond) && !isCorrect(carre) &&!isCorrect(trait) &&!isCorrect(z) )
{
result="ERROR";
}
else if ((carre < rond) && (carre < trait) && (carre < z)) {
result="RECTANGLE";
} else if ((rond < carre) && (rond < trait) && (rond < z)) {
result="ROND";
} else if ((trait < carre) && (trait < rond) && (trait < z)) {
result="TRAIT";
} else if ((z < carre) && (z < rond) && (z < trait)) {
result="Z";
}
else{
result="ERROR";
}
return result;
}
public static boolean isCorrect(int forme){
boolean result = true;
if(forme > 1000){
result = false;
}
return result;
}
}

202
Geste/src/Stroke.java Normal file
View File

@ -0,0 +1,202 @@
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
public class Stroke {
private static final int NB_POINTS = 32;
private static final int SQUARE_SIZE = 100;
ArrayList<Point2D.Double> listePoint;
Point2D.Double centroid;
public Stroke() {
listePoint = new ArrayList<Point2D.Double>();
}
public void init() {
listePoint = null;
centroid = null;
listePoint = new ArrayList<Point2D.Double>();
}
public boolean isEmpty() {
return listePoint == null || listePoint.size() == 0;
}
public int size() {
return listePoint.size();
}
public Point2D.Double getPoint(int i) {
return listePoint.get(i);
}
public Point2D.Double getCentroid() {
return centroid;
}
public double getCentroidX() {
return centroid.x;
}
public double getCentroidY() {
return centroid.y;
}
public void addPoint(Point2D.Double p) {
listePoint.add(p);
}
public void addPoint(int x, int y) {
listePoint.add(new Point2D.Double(x, y));
}
public void normalize() {
resample();
rotateToZero();
scaleToSquare();
translateToOrigin();
}
public double getPathLength() {
double dist = 0.0;
for (int i = 1; i < listePoint.size(); i++) {
Point2D.Double p0 = listePoint.get(i - 1);
Point2D.Double p1 = listePoint.get(i);
dist += p0.distance(p1);
}
return dist;
}
public ArrayList<Point2D.Double> resample() {
double l = getPathLength() / (NB_POINTS - 1);
double D = 0;
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
newPoints.add(listePoint.get(0));
for (int i = 1; i < listePoint.size(); i++) {
Point2D.Double p0 = listePoint.get(i - 1);
Point2D.Double p1 = listePoint.get(i);
double d = p0.distance(p1);
if (D + d >= l) {
double x = p0.getX() + ((l - D) / d) * (p1.getX() - p0.getX());
double y = p0.getY() + ((l - D) / d) * (p1.getY() - p0.getY());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
listePoint.add(i, q);
D = 0;
} else {
D += d;
}
}
if (newPoints.size() < NB_POINTS)
newPoints.add(listePoint.get(listePoint.size() - 1));
listePoint = newPoints;
return newPoints;
}
public Point2D.Double calculCentroid() {
double x = 0.0;
double y = 0.0;
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
x += p.getX();
y += p.getY();
}
return new Point2D.Double(x / listePoint.size(), y / listePoint.size());
}
public ArrayList<Point2D.Double> rotateToZero() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
centroid = calculCentroid();
Point2D.Double p0 = listePoint.get(0);
double theta = Math.atan2(centroid.getY() - p0.getY(), centroid.getX() - p0.getX());
theta *= -1;
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = ((p.getX() - centroid.getX()) * Math.cos(theta)) - ((p.getY() - centroid.getY()) * Math.sin(theta)) + centroid.getX();
double y = ((p.getX() - centroid.getX()) * Math.sin(theta)) + ((p.getY() - centroid.getY()) * Math.cos(theta)) + centroid.getY();
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
listePoint = newPoints;
return newPoints;
}
public Rectangle2D.Double getBoundingBox() {
Point2D.Double p0 = listePoint.get(0);
double minX = p0.getX();
double maxX = p0.getX();
double minY = p0.getY();
double maxY = p0.getY();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
if (minX > p.getX()) minX = p.getX();
if (minY > p.getY()) minY = p.getY();
if (maxX < p.getX()) maxX = p.getX();
if (maxY < p.getY()) maxY = p.getY();
}
return new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY);
}
public ArrayList<Point2D.Double> scaleToSquare() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
Rectangle2D.Double boundingBox = getBoundingBox();
System.out.println(boundingBox);
if (boundingBox.getHeight() > 10) {
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = (p.getX() - boundingBox.getX()) * (SQUARE_SIZE / boundingBox.getWidth());
double y = (p.getY() - boundingBox.getY()) * (SQUARE_SIZE / boundingBox.getHeight());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
}
// Pour lisser une droite ...
else {
Point2D.Double p0 = listePoint.get(0);
double y = p0.getY();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = (p.getX() - boundingBox.getX()) * (SQUARE_SIZE / boundingBox.getWidth());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
}
listePoint = newPoints;
return newPoints;
}
public ArrayList<Point2D.Double> translateToOrigin() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
centroid = calculCentroid();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = p.getX() - centroid.getX() + SQUARE_SIZE;
double y = p.getY() - centroid.getY() + SQUARE_SIZE;
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
centroid = new Point2D.Double(SQUARE_SIZE, SQUARE_SIZE);
listePoint = newPoints;
return newPoints;
}
public ArrayList<Point2D.Double> getPoints() {
return listePoint;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Point2D.Double p : listePoint) {
sb.append(p.getX());
sb.append(",");
sb.append(p.getY());
sb.append(";");
}
sb.deleteCharAt(sb.lastIndexOf(";"));
return sb.toString();
}
}

View File

@ -0,0 +1,30 @@
import fr.dgac.ivy.Ivy;
import fr.dgac.ivy.IvyClient;
import fr.dgac.ivy.IvyException;
import fr.dgac.ivy.IvyMessageListener;
class ivyTranslater implements IvyMessageListener {
private final Ivy bus;
private String argument;
ivyTranslater() throws IvyException {
// initialization, name and ready message
bus = new Ivy("IvyTranslater", "Geste", null);
bus.start("172.31.190.255:2010"); // starts the bus on the default domain
}
void sendMsg(String msg) {
try {
bus.sendMsg(msg);
} catch (IvyException e) {
e.printStackTrace();
}
}
@Override
public void receive(IvyClient ivyClient, String[] strings) {
}
}

View File

@ -0,0 +1,15 @@
package model;
/**
* Created by renando on 18/01/17.
*/
public class Forme {
public static String ROND = "49.36874425801907,99.99999999999997;52.137871590575564,109.91625276383108;56.071737363139725,119.43046540184451;61.80214324175517,127.98253939153958;68.89471962788437,135.44422256956452;76.68186247740189,142.17925022153233;85.87198322006986,146.8126274043917;96.00996880953375,148.58178953920262;106.30348216548668,148.74827722994524;116.3519797100073,146.52677692490897;126.14370717100178,143.3448747517063;135.92126553439746,140.11654316149;144.41428197808477,134.3171447844094;148.24516566682732,124.8014058846849;149.03560351590554,114.53640681797566;149.36874425801906,104.24975635462238;147.39562610365587,94.14501723046394;145.28117280397439,84.06889275065305;143.01783890049052,74.02734945701613;137.48652127661168,65.34342362618126;131.02102931463523,57.33057752027884;123.12244448897232,50.739695681273176;113.02399684625674,48.74827722994524;102.8427552516016,50.28684381904298;92.66151365694648,51.82541040814067;82.61053834560903,54.06179127227966;73.78333719845705,59.35301223779952;66.27977144115522,66.40040197451862;60.51849518502251,74.9322627147603;55.9393686686839,84.15335696130637;52.217424180785834,93.75219995571582;50.17490574903211,103.84315395897521";
public static String CARRE = "52.69884296685535,100.00000000000001;57.4263570169215,108.7627130884843;62.15387106698762,117.52542617696861;66.88138511705375,126.28813926545291;71.6088991671199,135.0508523539372;76.33641321718605,143.81356544242152;81.9393150231771,150.7243427755041;88.75367246214458,144.65272855936794;95.6682031135426,138.38728807664415;102.19946012447102,131.80623532807886;110.1454607888168,126.59281401181991;118.0914614531626,121.379392695561;126.45232993472823,118.18962767471157;135.0768084537892,115.8731941928786;143.03511235346264,110.75333974112675;149.62363392311394,104.21944232813007;148.79990706473362,94.83247229883482;144.94917344547378,85.76548679090541;140.22165939540764,77.00277370242112;135.49414534534148,68.2400606139368;130.76663129527535,59.47734752545251;126.03254354577487,50.724342775504105;117.67125594886619,52.77948132175305;109.5863007401236,56.93614474612603;101.64030007577782,62.14956606238497;94.33319187392759,68.09173283897825;87.93889359142544,74.5829260991812;80.63178538957524,80.5250928757745;72.68578472522942,85.73851419203345;64.73978406088362,90.95193550829234;56.79378339653783,96.16535682455128;49.62363392311395,102.01766411278217";
public static String TRAIT = "50.160415354784085,100.00000000000003;53.17326353894357,100.00000000000003;56.35600623453709,100.00000000000003;59.51615808464585,100.00000000000003;62.75345298715079,100.00000000000003;65.99074788965572,100.00000000000003;69.22804279216066,100.00000000000003;72.46533769466562,100.00000000000003;75.70263259717055,100.00000000000003;78.9399274996755,100.00000000000003;82.17722240218043,100.00000000000003;85.41451730468539,100.00000000000003;88.65181220719032,100.00000000000003;91.88910710969526,100.00000000000003;95.1264020122002,100.00000000000003;98.36369691470514,100.00000000000003;101.60099181721009,100.00000000000003;104.83828671971503,100.00000000000003;108.07558162221997,100.00000000000003;111.31287652472491,100.00000000000003;114.55017142722986,100.00000000000003;117.78746632973477,100.00000000000003;121.02476123223974,100.00000000000003;124.26205613474465,100.00000000000003;127.4993510372496,100.00000000000003;130.73664593975454,100.00000000000003;133.97394084225948,100.00000000000003;137.21123574476442,100.00000000000003;140.44853064726934,100.00000000000003;143.68582554977428,100.00000000000003;146.92312045227925,100.00000000000003;150.16041535478408,100.00000000000003\n";
public static String Z = "48.667281781568214,100.0;56.13077547156965,94.72412814215066;63.77348169611861,89.9756698954599;71.23697538612005,84.69979803761056;78.7004690761215,79.42392617976122;86.16396276612292,74.14805432191187;93.62745645612435,68.87218246406253;101.0909501461258,63.59631060621317;108.55444383612726,58.32043874836383;116.01793752612869,53.04456689051448;123.48143121613015,47.76869503266513;121.4608044018126,56.99298506179767;118.64458463730392,66.72237206952269;114.53741951567872,75.67633931460418;110.27274746607802,84.73859669014485;105.67084324582817,93.65742190626618;100.06305716815451,101.7033649232467;94.50357355821771,109.79544189231966;89.95456462449619,118.693792519923;85.98014937284123,127.86913720577274;81.88749642931137,136.86849264487194;78.53452483983213,146.29670266389215;81.02563079106577,147.76869503266514;88.8369779585736,143.87322297174438;96.71588431898968,140.60198918508388;104.17937800899111,135.32611732723453;111.58572629674038,129.96309423096258;118.81330702156262,124.32743652394561;126.27680071156405,119.05156466609625;133.74029440156548,113.7756928082469;141.20378809156693,108.49982095039755;148.66728178156822,103.22394909254834";
}