Courbe passant par des points suivant des tangentes

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Courbe passant par des points suivant des tangentes

Message non lu par francois »

Bonjour tout le monde.

Je sais qu'avec la commande \pscurve (du package pstricks) on peut faire une courbe bien lisse qui passe par des points donnés. Cette commande est bien pratique. Mais je voulais savoir s'il existe une commande qui permet :
1) de tracer une courbe bien lisse passant par des points donnés (comme \pscurve)
2) et en plus de le faire suivant une pente (ou coefficient directeur) donnée.

Je sais qu'avec la commande \psbezier on peut faire quelque chose dans ce genre. Mais il faut bricoler et c'est assez lourd.

J'attends vos réponses avec impatience.

A bientôt.
François D.
Utilisateur chevronné
Utilisateur chevronné
Messages : 1367
Inscription : dimanche 30 juillet 2006, 10:04
Localisation : Alsace

Message non lu par François D. »

Je ne résiste pas à l'envie :wink: ... MetaPost !

OK, je sors !
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Message non lu par francois »

Bonjour François D. Désolé, mais je n'ai pas compris ta remarque.
Tryphon
Modérateur honoraire
Modérateur honoraire
Messages : 1839
Inscription : mercredi 01 juin 2005, 18:39
Localisation : Un peu plus à l'Ouest

Message non lu par Tryphon »

Il n'est pas possible de faire "simplement" (càd sans programmer de macro) ce que tu demandes avec Pstricks. Maintenant, peut-être qu'une telle macro a déjà été programmé et qu'il faut trouver un package l'implémentant. Je ne le connais pas.

François D a voulu te dire que Metapost, lui, le fait (mais du coup c'est une technique complètement différente pour faire une figure).

Sinon, j'ai modifié un peu Geogebra pour qu'il fasse ce genre de chose et exporte le code pstricks correspondant. Je posterai la version en question sur le post que j'avais déjà fait sur Geogebra il y a un an maintenant. En attendant, je peux la joindre à ce message si tu veux, je modifierai plus tard.
Pas de questions en MP
La calculatrice, c'est comme Linux, c'est de la merde !
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Message non lu par francois »

Bonjour Tryphon.

Oui j'aimerais bien voir ça, si cela ne te dérange pas.

Sinon, quant à l'idée de faire sa propre macro, j'y avais pensé en utilisant \psbezier. Mais ce qui me gêne, c'est que les arguments #1 (pour les coordonnées des points) et #2 (pour les pentes) seront forcément composés de plusieurs "sous arguments". Et comment dire à LaTeX de prendre qu'un morceau de #1 (ou #2) ? Je ne sais pas, hélas !

Sinon je peux je peux me limiter à trois points et faire une commande du style \macommande#1#2#3#4#5#6 avec #1 #2 #3 les coordonnées des trois points et #4 #5 #6 les trois pentes. Mais ça limite la commande à trois points. C'est dommage.
Tryphon
Modérateur honoraire
Modérateur honoraire
Messages : 1839
Inscription : mercredi 01 juin 2005, 18:39
Localisation : Un peu plus à l'Ouest

Message non lu par Tryphon »

Tiens ! Tu cliques sur l'icone en forme de courbe plus moche que les autres (c'est moi qui l'ai dessiné :D ) et tu rentres les points par paires : un point par lequel passe ta courbe, un point dirigeant la tangente, etc. Quand t'as fini, tu recliques sur le dernier point (celui dirigeant la tangente au dernier point de la courbe).

Après t'es mûr pour exporter en Pstricks (Fichier/Exporter la figure, choisis Pstricks dans la liste).

Le code est pas forcément super propre, désolé, je vais arranger ça petit à petit. Pour information, la partie "Export" est en grande partie dûe à Loic Lecoq et est disponible dans la version officielle de développement de Geogebra. Les trucs qui font que son code déconne parfois ont été rajoutés par moi. :)
Pièces jointes
geogebra.jar
(4.57 Mio) Téléchargé 727 fois
Pas de questions en MP
La calculatrice, c'est comme Linux, c'est de la merde !
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Message non lu par francois »

Merci beaucoup. Je vais voir tout ça.
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Message non lu par francois »

C'est génial ce truc. Merci beaucoup. On obtient une bonne base de code pstricks. Après, on retouche un peu, mais globalement ça va beaucoup plus vite. Vraiment bravo. Tu dois t'y connaître pas mal en info.

Sinon, si quelqu'un a reussi à créer une macro LaTeX (avec pstricks) qui fait ce que je demandais au debut du post, je suis très intéressé.

Merci beaucoup Triphon.
Tryphon
Modérateur honoraire
Modérateur honoraire
Messages : 1839
Inscription : mercredi 01 juin 2005, 18:39
Localisation : Un peu plus à l'Ouest

Message non lu par Tryphon »

francois a écrit :C'est génial ce truc. Merci beaucoup. On obtient une bonne base de code pstricks. Après, on retouche un peu, mais globalement ça va beaucoup plus vite.
Je suis intéressé par un retour sur les défauts du code :)
Vraiment bravo. Tu dois t'y connaître pas mal en info.
Pas plus que ça, c'est vraiment trois lignes de code par ci par là. Le boss là-dedans, c'est Markus Hohenwarter, qui a fait Geogebra.
Sinon, si quelqu'un a reussi à créer une macro LaTeX (avec pstricks) qui fait ce que je demandais au debut du post, je suis très intéressé.

Merci beaucoup Triphon.
Vraiment pas de quoi ! :)
Pas de questions en MP
La calculatrice, c'est comme Linux, c'est de la merde !
pascalgeh

Tracer une courbe en précisant les points et les tangentes.

Message non lu par pascalgeh »

Bonjour,

voici un code réalisé il y a quelques temps permettant de le faire en pstricks: le code est certainement très maladroit et sûrement largement perfectible mais ça marche.

voici le code:

Code : Tout sélectionner

\usepackage{pstricks-add}
\usepackage{coollist}
% ne sert que pour déterminer la longueur de la %liste
% pourrait-être facilement remplacé par une macro utilisant \@for
\usepackage{fp}
\usepackage{calc}
\newcounter{ExtraireHermite}
\makeatletter
\newcommand{\ExtraireEltH}[3]{%
\setcounter{ExtraireHermite}{1}
\@for\@termeE :=#3\do{%
\ifthenelse{\theExtraireHermite=#2}{%
\FPround{#1}{\@termeE{}}{1}\stepcounter{ExtraireHermite}}{\stepcounter
{ExtraireHermite}}}}
\makeatother

%%
%#1 x1
%#2 y1
%#3 y'1
%#4 x2
%#5 y2
%#6 y'2
\newcommand{\Interpolation}[6]{%
\edef\PolyInterp{(x+(-1)*(#4))^2*((1+(-2)*(x+(-1)*(#1))*(#1+(-1)*
(#4))/((#1+(-1)*(#4))^2))*#2+(x+(-1)*(#1))*#3)/((#1+(-1)*(#4))^2)+(x+
(-1)*(#1))^2*((1+(-2)*(x+(-1)*(#4))*(#4+(-1)*(#1))/((#1+(-1)*(#4))^2))
*#5+(x+(-1)*(#4))*#6)/((#1+(-1)*(#4))^2)}%
\psplot[algebraic=true]{#1}{#4}{\PolyInterp}%
}

%%% la macro%%%
%\FPset{\DemiTangente}
\newcounter{Tempo}
\newcounter{NbreTriplets}
\newcommand{\HermiteDDLA}[2][1]{%
\setcounter{NbreTriplets}{0}%
\listlenstore{NbreTriplets}{#2}% utilisation de coollist
\setcounter{NbreTriplets}{(\theNbreTriplets/3)-1}%
%%% gestion du premier triplet
% extraction du premier triplet
\ExtraireEltH{\Xa}{1}{#2}%
\ExtraireEltH{\Ya}{2}{#2}%
\ExtraireEltH{\Yprimea}{3}{#2}%
% gestion des tangentes%
\FPeval\DemiTangente{#1/((1+(\Yprimea)^2)^(0.5))}
\FPeval\DemiTangenteV{(\Yprimea)*(\DemiTangente)}
\FPsub\TangentXa\Xa\DemiTangente
\FPadd\TangentXb\Xa\DemiTangente
\FPsub\TangentYa\Ya\DemiTangenteV
\FPround\TangentYa\TangentYa{3}
\FPadd\TangentYb\Ya\DemiTangenteV
\FPround\TangentYb\TangentYb{3}
%tracés
\psline{<->}(\TangentXa,\TangentYa)(\TangentXb,\TangentYb)
%%Gestion des triplets suivants
\multido{\n=4+3}{\theNbreTriplets}{%
%extraction du triplet
\setcounter{Tempo}{\n}%
\ExtraireEltH{\Xb}{\theTempo}{#2}%
\stepcounter{Tempo}%
\ExtraireEltH{\Yb}{\theTempo}{#2}%
\stepcounter{Tempo}%
\ExtraireEltH{\Yprimeb}{\theTempo}{#2}%
%gestion de la tangente
\FPeval\DemiTangente{#1/((1+(\Yprimeb)*(\Yprimeb))^(0.5))}
\FPeval\DemiTangenteV{(\Yprimeb)*(\DemiTangente)}
\FPsub\TangentXa\Xb\DemiTangente
\FPadd\TangentXb\Xb\DemiTangente
\FPsub\TangentYa\Yb\DemiTangenteV
\FPround\TangentYa\TangentYa{3}
\FPadd\TangentYb\Yb\DemiTangenteV
\FPround\TangentYb\TangentYb{3}
%tracés
\Interpolation{\Xa}{\Ya}{\Yprimea}{\Xb}{\Yb}{\Yprimeb}%
\psline{<->}(\TangentXa,\TangentYa)(\TangentXb,\TangentYb)
%fin tracés
\FPset\Xa\Xb%
\FPset\Ya\Yb%
\FPset\Yprimea\Yprimeb%
}}
%%%%%%%%% version sans tangentes%%%%%%%%%%%%%%%
\newcommand{\HermiteDDLB}[2][1]{%
\setcounter{NbreTriplets}{0}%
\listlenstore{NbreTriplets}{#2}}% utilisation de coollist
\setcounter{NbreTriplets}{(\theNbreTriplets/3)-1}%
\ExtraireEltH{\Xa}{1}{#2}%
\ExtraireEltH{\Ya}{2}{#2}%
\ExtraireEltH{\Yprimea}{3}{#2}%
\multido{\n=4+3}{\theNbreTriplets}{%
\setcounter{Tempo}{\n}%
\ExtraireEltH{\Xb}{\theTempo}{#2}%
\stepcounter{Tempo}%
\ExtraireEltH{\Yb}{\theTempo}{#2}%
\stepcounter{Tempo}%
\ExtraireEltH{\Yprimeb}{\theTempo}{#2}%
\Interpolation{\Xa}{\Ya}{\Yprimea}{\Xb}{\Yb}{\Yprimeb}%
\FPset\Xa\Xb%
\FPset\Ya\Yb%
\FPset\Yprimea\Yprimeb%
}}
%%%%% definition version étoilée ou non%%%%%%
\makeatletter
\def\HermiteDDL{\@ifstar\HermiteDDLB\HermiteDDLA}
\makeatother
%%%%%%%%%%%%%%% fin macro %%%%%%%%%%%%%%%%%%%%%%


exemples

L'argument optionnel désigne la longueur de la demi-tangente en
unités pstricks (quand le repère est orthonormé)\\
La valeur par défaut est 1.
\psset{unit=0.7cm}
\begin{verbatim}
\begin{pspicture}(-5,-3)(9,5)
\psaxes(0,0)(-5,-3)(9,5)
\HermiteDDL{-5,2,0,-3,2,-2,-1,-2.5,2,0,2,1,4,0,3,6,-2,-
2,8,0,3,9,2,0.5}
\end{pspicture}
\end{verbatim}

donne

\begin{center}
\begin{pspicture}(-5,-3)(9,5)
%\psgrid(0,0)(-5,-3)(9,5)
\psaxes(0,0)(-5,-3)(9,5)
\HermiteDDL{-5,2,0,-3,2,-2,-1,-2.5,2,0,2,1,4,0,3,6,-2,-
2,8,0,3,9,2,0.5}
\end{pspicture}
\end{center}

\vspace{2cm}

\begin{verbatim}
\begin{pspicture}(-5,-3)(9,5)
\psaxes(0,0)(-5,-3)(9,5)
\HermiteDDL[2]{-5,2,0,-3,-1,0.5,-1,-2.5,1,0,2,0,4,0,3,6,-
2,0,8,0,3,9,2,0.5}
\end{pspicture}
\end{verbatim}

donne

\begin{center}
\begin{pspicture}(-5,-3)(9,5)
\psaxes(0,0)(-5,-3)(9,5)
\HermiteDDL[2]{-5,2,0,-3,-1,0.5,-1,-2.5,1,0,2,0,4,0,3,6,-
2,0,8,0,3,9,2,0.5}
\end{pspicture}
\end{center}
La macro \verb+\HermiteDDL*+ trace la courbe sans les tangentes.

Toute remarque constructive est la bienvenue et même souhaitée.
En particulier ce serait bien de pouvoir faire: \HermiteDDl(1,-2,3)(3,5,-0.3) etc. Mais ça sort de mon domaine de compétence.
RGB

Re: Courbe passant par des points suivant des tangentes

Message non lu par RGB »

francois a écrit :Je sais qu'avec la commande \psbezier on peut faire quelque chose dans ce genre. Mais il faut bricoler et c'est assez lourd.
Et non, ce n'est plus lourd.
J'ai écrit un convertisseur de fichiers DXF qui génère du code pour PSTricks.

Il suffit donc de dessiner la courbe voulue avec des BSplines (avec QCad, TurboCad, Blender, Solidworks par exemple). Un coup de convertisseur sur le fichier DXF et on a le code PSTricks...

Pour créer des tangentes propres, on peut par exemple dessiner le polygone de contrôle sur un calque, et les BSplines sur un autre.
Un fois les BSplines tracées en s'accrochant aux extrémités des segments du polygone, on rend le calque qui contient le polygone invisible et on obtient ainsi un tracé de splines impeccable.

Bon pour l'instant mon convertisseur n'est pas fini, mais il marche pour les splines, polylines, les arcs, les ellipses, le texte, la couleur et le type de ligne. Je travaille à le rendre mon code C++ portable pour Linux...
pascalgeh

Message non lu par pascalgeh »

Le pb avec psbezier est nous ne sommes pas assurés d'avoir le graphe d'une fonction
francois
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 856
Inscription : jeudi 21 septembre 2006, 00:14
Localisation : Antony

Message non lu par francois »

Salut tout le monde.

Pascalgeh, j'ai regardé le code que tu nous as gracieusement montré. Mais chez moi, ça ne marche pas. La commande \ExtraireEltH ne lui plait pas (illegal parameter in definition of \@fortmp ...). J'ai l'installation MikTex sous Windows XP.
pascalgeh

Message non lu par pascalgeh »

Donne moi un ECM pour voir le pb car chez moi ça marche nickel (et ça ne dépend pas de la distribution).
Thibault
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : jeudi 28 février 2008, 16:20
Localisation : Vendée

Re:

Message non lu par Thibault »

Tryphon a écrit : mercredi 24 janvier 2007, 13:22 Tiens ! Tu cliques sur l'icone en forme de courbe plus moche que les autres (c'est moi qui l'ai dessiné :D ) et tu rentres les points par paires : un point par lequel passe ta courbe, un point dirigeant la tangente, etc. Quand t'as fini, tu recliques sur le dernier point (celui dirigeant la tangente au dernier point de la courbe).

Après t'es mûr pour exporter en Pstricks (Fichier/Exporter la figure, choisis Pstricks dans la liste).

Le code est pas forcément super propre, désolé, je vais arranger ça petit à petit. Pour information, la partie "Export" est en grande partie dûe à Loic Lecoq et est disponible dans la version officielle de développement de Geogebra. Les trucs qui font que son code déconne parfois ont été rajoutés par moi :)
Salut tout le monde, je déterre cette discussion car j'ai trouvé plein de fichiers hermite sur geogebra mais aucun avec une macro comme semble proposer ce fichier de Tryphon. En effet, je cherche à faire un fichier geogebra avec 2 courbes passant par des points avec des tangentes données sur geogebra (ce n'est pas pour un export vers LaTeX cette fois ci (j'ai une macro pstricks pour ça).
Est-ce que quelqu'un a sous la main le fichier de Tryphon (le lien est mort) ou un fichier geogebra dans lequel il y a 2 courbes de ce type. Je pourrais ajuster les points dans ce cas.

Merci d'avance !
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
MB
Administrateur
Administrateur
Messages : 8078
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Courbe passant par des points suivant des tangentes

Message non lu par MB »

Bonsoir,

Les pièces jointes très anciennes ont malheureusement été perdues lors d'une mise à jour, il ne sera donc pas facile de retrouver le fichier en question.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Thibault
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : jeudi 28 février 2008, 16:20
Localisation : Vendée

Re: Courbe passant par des points suivant des tangentes

Message non lu par Thibault »

Oui, avec un peu de chance, quelqu'un a gardé le fichier ;-)
Je croise les doigts !

Merci
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets