- Le grincheuxSage
C'est illisible (et entre nous mal codé pour que ce soit efficace).
Par ailleurs, l'algorithme est faux. Les ToTheLeftofPoint et ToTheRightofPoint sont tous deux de même parité. Ou alors, il faut me montrer la tronche du polygone.
Par ailleurs, l'algorithme est faux. Les ToTheLeftofPoint et ToTheRightofPoint sont tous deux de même parité. Ou alors, il faut me montrer la tronche du polygone.
- If_Then_ElseNiveau 9
Voici quelques "tronches":
En langage C, ça donne quelque chose comme ça:
En langage C, ça donne quelque chose comme ça:
// Globals which should be set before calling these functions:
//
// int polySides = how many corners the polygon has
// float polyX[] = horizontal coordinates of corners
// float polyY[] = vertical coordinates of corners
// float x, y = point to be tested
//
// The following global arrays should be allocated before calling these functions:
//
// float constant[] = storage for precalculated constants (same size as polyX)
// float multiple[] = storage for precalculated multipliers (same size as polyX)
//
// (Globals are used in this example for purposes of speed. Change as
// desired.)
//
// USAGE:
// Call precalc_values() to initialize the constant[] and multiple[] arrays,
// then call pointInPolygon(x, y) to determine if the point is in the polygon.
//
// The function will return YES if the point x,y is inside the polygon, or
// NO if it is not. If the point is exactly on the edge of the polygon,
// then the function may return YES or NO.
//
// Note that division by zero is avoided because the division is protected
// by the "if" clause which surrounds it.
void precalc_values() {
int i, j=polySides-1 ;
for(i=0; iif(polyY[j]==polyY[i]) {
constant[i]=polyX[i];
multiple[i]=0; }
else {
constant[i]=polyX[i]-(polyY[i]*polyX[j])/(polyY[j]-polyY[i])+(polyY[i]*polyX[i])/(polyY[j]-polyY[i]);
multiple[i]=(polyX[j]-polyX[i])/(polyY[j]-polyY[i]); }
j=i; }}
bool pointInPolygon() {
int i, j=polySides-1 ;
bool oddNodes=NO ;
for (i=0; iif ((polyY[i]< y && polyY[j]>=y
|| polyY[j]< y && polyY[i]>=y)) {
oddNodes^=(y*multiple[i]+constant[i]j=i; }
return oddNodes; }
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
Pour tester le type de polygone:
/*
* C code from the article
* "Testing the Convexity of a Polygon"
* by Peter Schorn and Frederick Fisher,
* (schorn@inf.ethz.ch, fred@kpc.com)
* in "Graphics Gems IV", Academic Press, 1994
*/
/* Program to Classify a Polygon's Shape */
#include
typedef enum { NotConvex, NotConvexDegenerate,
ConvexDegenerate, ConvexCCW, ConvexCW } PolygonClass;
typedef struct { double x, y; } Point2d;
int WhichSide(p, q, r) /* Given a directed line pq, determine */
Point2d p, q, r; /* whether qr turns CW or CCW. */
{
double result;
result = (p.x - q.x) * (q.y - r.y) - (p.y - q.y) * (q.x - r.x);
if (result < 0) return -1; /* q lies to the left (qr turns CW). */
if (result > 0) return 1; /* q lies to the right (qr turns CCW). */
return 0; /* q lies on the line from p to r. */
}
int Compare(p, q) /* Lexicographic comparison of p and q */
Point2d p, q;
{
if (p.x < q.x) return -1; /* p is less than q. */
if (p.x > q.x) return 1; /* p is greater than q. */
if (p.y < q.y) return -1; /* p is less than q. */
if (p.y > q.y) return 1; /* p is greater than q. */
return 0; /* p is equal to q. */
}
int GetPoint(f, p) /* Read p's x- and y-coordinate from f */
FILE *f; /* and return true, iff successful. */
Point2d *p;
{
return !feof(f) && (2 == fscanf(f, "%lf%lf", &(p->x), &(p->y)));
}
int GetDifferentPoint(f, previous, next)
FILE *f; /* Read next point into 'next' until it */
Point2d previous, *next; /* is different from 'previous' and */
{ /* return true iff successful. */
int eof;
while((eof = GetPoint(f, next)) && (Compare(previous, *next) == 0));
return eof;
}
/* CheckTriple tests three consecutive points for change of direction
* and for orientation.
*/
#define CheckTriple \
if ( (thisDir = Compare(second, third)) == -curDir ) \
++dirChanges; \
curDir = thisDir; \
if ( thisSign = WhichSide(first, second, third) ) { \
if ( angleSign == -thisSign ) \
return NotConvex; \
angleSign = thisSign; \
} \
first = second; second = third;
/* Classify the polygon vertices on file 'f' according to: 'NotConvex' */
/* 'NotConvexDegenerate', 'ConvexDegenerate', 'ConvexCCW', 'ConvexCW'. */
PolygonClass ClassifyPolygon(f)
FILE *f;
{
int curDir, thisDir, thisSign, angleSign = 0, dirChanges = 0;
Point2d first, second, third, saveFirst, saveSecond;
if ( !GetPoint(f, &first) || !GetDifferentPoint(f, first, &second) )
return ConvexDegenerate;
saveFirst = first; saveSecond = second;
curDir = Compare(first, second);
while( GetDifferentPoint(f, second, &third) ) {
CheckTriple;
}
/* Must check that end of list continues back to start properly */
if ( Compare(second, saveFirst) ) {
third = saveFirst; CheckTriple;
}
third = saveSecond; CheckTriple;
if ( dirChanges > 2 ) return angleSign ? NotConvex : NotConvexDegenerate;
if ( angleSign > 0 ) return ConvexCCW;
if ( angleSign < 0 ) return ConvexCW;
return ConvexDegenerate;
}
int main()
{
switch ( ClassifyPolygon(stdin) ) {
case NotConvex: fprintf( stderr,"Not Convex\n");
exit(-1); break;
case NotConvexDegenerate: fprintf( stderr,"Not Convex Degenerate\n");
exit(-1); break;
case ConvexDegenerate: fprintf( stderr,"Convex Degenerate\n");
exit( 0); break;
case ConvexCCW: fprintf( stderr,"Convex Counter-Clockwise\n");
exit( 0); break;
case ConvexCW: fprintf( stderr,"Convex Clockwise\n");
exit( 0); break;
}
}
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- Le grincheuxSage
L'un des polygones est croisé. C'est donc hors du champ des hypothèses de départ.If_Then_Else a écrit:Voici quelques "tronches":
Ce n'est pas parce que c'est écrit en C que c'est mieux écrit.
En langage C, ça donne quelque chose comme ça:
// Globals which should be set before calling these functions:
//
// int polySides = how many corners the polygon has
// float polyX[] = horizontal coordinates of corners
// float polyY[] = vertical coordinates of corners
// float x, y = point to be tested
//
// The following global arrays should be allocated before calling these functions:
//
// float constant[] = storage for precalculated constants (same size as polyX)
// float multiple[] = storage for precalculated multipliers (same size as polyX)
//
// (Globals are used in this example for purposes of speed. Change as
// desired.)
//
// USAGE:
// Call precalc_values() to initialize the constant[] and multiple[] arrays,
// then call pointInPolygon(x, y) to determine if the point is in the polygon.
//
// The function will return YES if the point x,y is inside the polygon, or
// NO if it is not. If the point is exactly on the edge of the polygon,
// then the function may return YES or NO.
//
// Note that division by zero is avoided because the division is protected
// by the "if" clause which surrounds it.
void precalc_values() {
int i, j=polySides-1 ;
for(i=0; iif(polyY[j]==polyY[i]) {
constant[i]=polyX[i];
multiple[i]=0; }
else {
constant[i]=polyX[i]-(polyY[i]*polyX[j])/(polyY[j]-polyY[i])+(polyY[i]*polyX[i])/(polyY[j]-polyY[i]);
multiple[i]=(polyX[j]-polyX[i])/(polyY[j]-polyY[i]); }
j=i; }}
bool pointInPolygon() {
int i, j=polySides-1 ;
bool oddNodes=NO ;
for (i=0; iif ((polyY[i]< y && polyY[j]>=y
|| polyY[j]< y && polyY[i]>=y)) {
oddNodes^=(y*multiple[i]+constant[i]j=i; }
return oddNodes; }
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- If_Then_ElseNiveau 9
@LeGrincheux
Merci pour toutes tes appréciations évidemment éclairées, mais pourrais-tu condescendre à nous donner un exemple de la perfection (en RPL/2 par exemple pour en apprécier la pureté syntaxique et lexematique...)?
Merci pour toutes tes appréciations évidemment éclairées, mais pourrais-tu condescendre à nous donner un exemple de la perfection (en RPL/2 par exemple pour en apprécier la pureté syntaxique et lexematique...)?
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
Signalé: L'EDI Java's cool permettant de s'initier (avec les élèves lycéens...) au Java ( http://javascool.gforge.inria.fr/)
Le site précise
Le site précise
Créé pour apprendre aux personnes qui savent juste allumer leur ordinateur à programmer, par exemple des jeux (en 2D) ou des minis-logiciels, son interface est simple ainsi que son langage dit de "balisage".
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
Pour ceux qui sont concernés par l'informatique au Lycée et qui ne connaîtraient pas encore SILO (https://wiki.inria.fr/sciencinfolycee/TexteOfficielProgrammeISN#Les_projets)
Notions prévues au programme de Terminale S notamment.
Notions prévues au programme de Terminale S notamment.
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- yphrogEsprit éclairé
Merci If_Then_Else. Je ne sais pas ce que vaut ce site, je ne l'ai pas encore vraiment exploré. Au cas où tu ne le connais pas, je le reposte:
http://www.codecademy.com/learn
(Ruby / JQuery / Javascript / etc.) tout ce que n'aime pas le grincheux.
et puis bien sûr
http://www.w3schools.com/sitemap/default.asp
Sinon, tout prof est developpeur, il me semble. Ce serait bien de ne pas perdre cela de vu quand on parle de développement!
http://www.codecademy.com/learn
(Ruby / JQuery / Javascript / etc.) tout ce que n'aime pas le grincheux.
et puis bien sûr
http://www.w3schools.com/sitemap/default.asp
Sinon, tout prof est developpeur, il me semble. Ce serait bien de ne pas perdre cela de vu quand on parle de développement!
- Le grincheuxSage
Utiliser Java sans avoir appris au préalable un langage impératif, fonctionnel ou procédural est une immense bêtise. Java, à l'instar de tous les langages objets, part du principe que les fonctions procèdent des données, ce qui est une illusion. Il faut toujours commencer par maîtriser les concepts de base avant d'attaquer un langage objet. D'ailleurs, les seuls bons programmeurs Java que je connaisse sont passés par le C++ avant (parce qu'ils comprennent les mécanismes de gestion de la mémoire ce que n'impose malheureusement pas Java ; je parle de l'allocation de la mémoire, du déréférencement des pointeurs et des références ainsi que du polymorphisme). Et je ne connais aucun bon développeur C++ qui ne soit pas passé avant sur du C.If_Then_Else a écrit:Signalé: L'EDI Java's cool permettant de s'initier (avec les élèves lycéens...) au Java ( http://javascool.gforge.inria.fr/)
Le site précise
Créé pour apprendre aux personnes qui savent juste allumer leur ordinateur à programmer, par exemple des jeux (en 2D) ou des minis-logiciels, son interface est simple ainsi que son langage dit de "balisage".
Par ailleurs, on n'utilise pas pour développer des EDI, surtout quand on apprend. Les netbeans, eclipse et consorts sont des aberrations. On utilise un éditeur de texte façon VI ou Emacs et on fait les choses à la main (y compris le makefile ou le fichier build.xml). C'est la seule façon de comprendre les choses. Utiliser un EDI revient à appliquer des recettes et, lorsque l'EDI change, le developpeur est complètement perdu parce qu'il ne sait pas écrire un makefile de base (et cherche ses petits dans l'arborescence parce que ces fichus EDI trouvent intelligents de séparer totalement les en-têtes des codes sources !).
Et ça permet de prendre des bonnes habitudes d'indentation (vive l'indentation d'Alman) et d'avoir des fichiers sources qui ne dépassent pas les 80 caractères de large !
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- If_Then_ElseNiveau 9
@Grincheux
Voici un fil de discussion entre profs qui devrait t'intéresser puisqu'il commence par cette question (Enseigner les objets ou non?) :
La suite ici.
Voici un fil de discussion entre profs qui devrait t'intéresser puisqu'il commence par cette question (Enseigner les objets ou non?) :
Dans l'un des livres de référence de l'ISN :
"Introduction à la sciences informatique" - La classe terminale page 128
La programmation objet est déclarée comme étant "hors programme".
Qu'en est-il exactement ?
La suite ici.
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
xphrog a écrit:Merci If_Then_Else. Je ne sais pas ce que vaut ce site, je ne l'ai pas encore vraiment exploré. Au cas où tu ne le connais pas, je le reposte:
http://www.codecademy.com/learn
(Ruby / JQuery / Javascript / etc.) tout ce que n'aime pas le grincheux.
et puis bien sûr
http://www.w3schools.com/sitemap/default.asp
Sinon, tout prof est developpeur, il me semble. Ce serait bien de ne pas perdre cela de vu quand on parle de développement!
Merci xPHPfrog !
Beaucoup de lecture en perspective pendant ces congés de fin d'année...
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
Par ailleurs, on n'utilise pas pour développer des EDI, surtout quand on apprend. Les netbeans, eclipse et consorts sont des aberrations. On utilise un éditeur de texte façon VI ou Emacs et on fait les choses à la main (y compris le makefile ou le fichier build.xml). C'est la seule façon de comprendre les choses. Utiliser un EDI revient à appliquer des recettes et, lorsque l'EDI change, le developpeur est complètement perdu parce qu'il ne sait pas écrire un makefile de base (et cherche ses petits dans l'arborescence parce que ces fichus EDI trouvent intelligents de séparer totalement les en-têtes des codes sources !).
Et ça permet de prendre des bonnes habitudes d'indentation (vive l'indentation d'Alman) et d'avoir des fichiers sources qui ne dépassent pas les 80 caractères de large ! furieux
100% d'accord avec toi: rien ne vaut l'odeur vivifiante et fortifiante du cambouis!
Mais en avons-nous le temps en cette période de pénurie des analystes programmeurs ? Employabilité quand tu nous tiens...
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- If_Then_ElseNiveau 9
Sur PC, rien de mieux que le codage manuel avec NotePad++ d'après moi...
J'adore :
J'adore :
By optimizing as many routines as possible without losing user friendliness, Notepad++ is trying to reduce the world carbon dioxide emissions.
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- yphrogEsprit éclairé
J'aime bien Bluefish, ITE: http://en.wikipedia.org/wiki/Bluefish_%28text_editor%29
Allez plus de lecture pour mes vacances...
http://regex.info/book.html
http://php.net/pcre
Allez plus de lecture pour mes vacances...
http://regex.info/book.html
http://php.net/pcre
- If_Then_ElseNiveau 9
@Grincheux
Permets-moi de plaider la cause de l'EDI d'EMBARCADERO RAD Studio qui permet le développement multiplateforme avec le même code source (PC,MAC, IOS, Androids) comme le montre cette petite video
Permets-moi de plaider la cause de l'EDI d'EMBARCADERO RAD Studio qui permet le développement multiplateforme avec le même code source (PC,MAC, IOS, Androids) comme le montre cette petite video
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- keroGrand sage
Perso, j'utilise de plus en plus Kate, qui vient avec KDE. Emacs et Vim, bon. Le premier j'ai pas mal utilisé, mais sauf à l'utiliser très régulièrement, difficile de s'y faire vraiment.
- yphrogEsprit éclairé
http://en.wikipedia.org/wiki/Embarcadero_Delphi
serendipity: http://cc2e.com/Page.aspx?hid=131
serendipity: http://cc2e.com/Page.aspx?hid=131
- Le grincheuxSage
D'abord, je ne condescends pas; ensuite, je n'ai pas le temps de me pencher sur le problème pour donner un algorithme élégant dans un langage fonctionnel.If_Then_Else a écrit:@LeGrincheux
Merci pour toutes tes appréciations évidemment éclairées, mais pourrais-tu condescendre à nous donner un exemple de la perfection (en RPL/2 par exemple pour en apprécier la pureté syntaxique et lexematique...)?
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- If_Then_ElseNiveau 9
Le grincheux a écrit:D'abord, je ne condescends pas; ensuite, je n'ai pas le temps de me pencher sur le problème pour donner un algorithme élégant dans un langage fonctionnel.If_Then_Else a écrit:@LeGrincheux
Merci pour toutes tes appréciations évidemment éclairées, mais pourrais-tu condescendre à nous donner un exemple de la perfection (en RPL/2 par exemple pour en apprécier la pureté syntaxique et lexematique...)?
Le contraire eût étonné mais on se consolera avec Beaumarchais
On le sait, on l'a dit, « la critique est aisée, mais l'art est difficile », certes, mais sans « liberté de blâmer, il n'est pas d'éloges flatteurs »
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- Le grincheuxSage
Tu ne m'auras pas avec ce genre d'arguments qui frisent l'insulte. Je ne vois pas pourquoi je perdrais du temps à coder un truc dont personne n'a que faire en reprenant les bases pour le faire entrer dans un paradigme fonctionnel.If_Then_Else a écrit:Le grincheux a écrit:D'abord, je ne condescends pas; ensuite, je n'ai pas le temps de me pencher sur le problème pour donner un algorithme élégant dans un langage fonctionnel.If_Then_Else a écrit:@LeGrincheux
Merci pour toutes tes appréciations évidemment éclairées, mais pourrais-tu condescendre à nous donner un exemple de la perfection (en RPL/2 par exemple pour en apprécier la pureté syntaxique et lexematique...)?
Le contraire eût étonné mais on se consolera avec Beaumarchais
On le sait, on l'a dit, « la critique est aisée, mais l'art est difficile », certes, mais sans « liberté de blâmer, il n'est pas d'éloges flatteurs »
Remarque, je l'aurais bien volontiers fait s'il était possible d'avoir avec toi une discussion suivie, ce qui n'est vraiment pas le cas.
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- If_Then_ElseNiveau 9
@LeGrinche
Difficile d'entamer une discussion sérieuse avec toi puisque tout est illisible, idiot, déplacé, mal foutu, irresponsable etc.. Syndrome d'Asperger? Adieu donc.
@xphrog
Merci pour BlueFish que je ne connaissais pas.
Difficile d'entamer une discussion sérieuse avec toi puisque tout est illisible, idiot, déplacé, mal foutu, irresponsable etc.. Syndrome d'Asperger? Adieu donc.
@xphrog
Merci pour BlueFish que je ne connaissais pas.
_________________
« On n'enseigne pas ce que l'on sait ou ce que l'on croit savoir : on n'enseigne et on ne peut enseigner que ce que l'on est. »
- Le grincheuxSage
Je peux prouver mes dires et mon expérience me permet de maintenir et de défendre mes positions. Jusqu'ici, tu n'as strictement rien prouvé. À chaque fois que j'ai essayé d'avoir une discussion sérieuse avec toi, tu essaies de t'en sortir avec une pirouette totalement hors de propos. Jamais, tu n'as répondu à mes arguments.If_Then_Else a écrit:@LeGrinche
Difficile d'entamer une discussion sérieuse avec toi puisque tout est illisible, idiot, déplacé, mal foutu, irresponsable etc.. Syndrome d'Asperger?
Par ailleurs, là, tu ne frises plus l'insulte. Tu insultes gratuitement et pour moi, les bornes sont franchies. Bel état d'esprit.
Bonne nouvelle.
Adieu donc.
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- yphrogEsprit éclairé
oui, le grincheux, laissons de la place pour d'autres qui ont des projets intéressants. Un dévéloppeur dévélope.
un papoteur, comme la grenouille qui te parle, papote.
ITE: bon, c'est vrai qu'il est un peu WYSIWYG notre grinch':
http://www.forbiddenplanet.co.uk/blog/2012/art-draw-grinch-by-themooks/
un papoteur, comme la grenouille qui te parle, papote.
ITE: bon, c'est vrai qu'il est un peu WYSIWYG notre grinch':
http://www.forbiddenplanet.co.uk/blog/2012/art-draw-grinch-by-themooks/
- yphrogEsprit éclairé
je relance l'appel: y en a-t-il qui travaille avec Mediawiki (à part Dropscone et Skaara, bien sûr: http://agreg-ink.net)?
en parlant de dépendencies...
http://www.mediawiki.org/wiki/Extension:EmbedObject
c'est inévitable, non?
en parlant de dépendencies...
http://www.mediawiki.org/wiki/Extension:EmbedObject
c'est inévitable, non?
- Le grincheuxSage
Je préfère de loin quelque chose comme Spip. Les politiques de publications sont plus fines et plus intéressantes.xphrog a écrit:je relance l'appel: y en a-t-il qui travaille avec Mediawiki (à part Dropscone et Skaara, bien sûr: http://agreg-ink.net)?
en parlant de dépendencies...
http://www.mediawiki.org/wiki/Extension:EmbedObject
c'est inévitable, non?
_________________
Le carnet du Grincheux, Chroniques de misanthropie ordinaire
http://grincheux.de-charybde-en-scylla.fr/
Ma vie, mon œuvre
http://www.systella.fr/
- yphrogEsprit éclairé
les permissions d'écriture semblent en effet plutôt transversale sur wiki... je crois comprendre ce que tu veux dire. Et en contexte scolaire, SPIP est probablement plus sécure, mais bien moins pédagogique, docs statiques... non?
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum