How do I make tangents to ellipses and lines parallel to these?How to draw tangent line of an arbitrary point...
Why is my explanation wrong?
What is "desert glass" and what does it do to the PCs?
If nine coins are tossed, what is the probability that the number of heads is even?
How to write a chaotic neutral protagonist and prevent my readers from thinking they are evil?
Where do you go through passport control when transiting through another Schengen airport on your way out of the Schengen area?
I can't die. Who am I?
Practical reasons to have both a large police force and bounty hunting network?
What is the oldest European royal house?
Is divide-by-zero a security vulnerability?
Why do we call complex numbers “numbers” but we don’t consider 2 vectors numbers?
Convert an array of objects to array of the objects' values
Remove object from array based on array of some property of that object
Is this nominative case or accusative case?
What's the best tool for cutting holes into duct work?
How do you make a gun that shoots melee weapons and/or swords?
Why aren't there more gauls like Obelix?
Learning to quickly identify valid fingering for piano?
Under what conditions would I NOT add my Proficiency Bonus to a Spell Attack Roll (or Saving Throw DC)?
3.5% Interest Student Loan or use all of my savings on Tuition?
Are there other characters in the Star Wars universe who had damaged bodies and needed to wear an outfit like Darth Vader?
Gemara word for QED
Using the imperfect indicative vs. subjunctive with si
How to make sure I'm assertive enough in contact with subordinates?
ESPP--any reason not to go all in?
How do I make tangents to ellipses and lines parallel to these?
How to draw tangent line of an arbitrary point on a path in TikZEasy curves in TikZRunning Sample Tikz CodeHow to draw an elliptical arc in TikZ given only opposite extreme points (vertices) of the ellipse?TikZ: normal and tangent vectors added to ellipse 2TikZ: Is drawing an arc that either curves to much or isn't long enoughCalculate the intersection between a path enclosed by a `scope` and another pathThe intersection of a sphere with planes through an axis tangent to the north poleTikZ: Drawing an arc from an intersection to an intersectiontikz/pgfplots - Plotting 3D surface with sphereDraw a tangent vector to the circumference path
I have specified an ellipse and three points in the following way:
defaa{2.5}
defbb{2}
draw[thick] (0,0) ellipse [x radius=aa,y radius=bb];
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0)
coordinate (r) at ($(0,0)+(36:{aa} and {bb})$);
fill (c) circle (2pt)
(d) circle (2pt)
(r) circle (2pt);
Now I need
- a tangent vector to the ellipse through (r);
- a line parallel to this tangent through (c);
- a coordinate at the intersection of this last line with the line joining (r) and (d).
I cannot seem to find a solution to 1. that allows me to solve 2. and 3. Any suggestions, please?
tikz-pgf asymptote
add a comment |
I have specified an ellipse and three points in the following way:
defaa{2.5}
defbb{2}
draw[thick] (0,0) ellipse [x radius=aa,y radius=bb];
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0)
coordinate (r) at ($(0,0)+(36:{aa} and {bb})$);
fill (c) circle (2pt)
(d) circle (2pt)
(r) circle (2pt);
Now I need
- a tangent vector to the ellipse through (r);
- a line parallel to this tangent through (c);
- a coordinate at the intersection of this last line with the line joining (r) and (d).
I cannot seem to find a solution to 1. that allows me to solve 2. and 3. Any suggestions, please?
tikz-pgf asymptote
2
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24
add a comment |
I have specified an ellipse and three points in the following way:
defaa{2.5}
defbb{2}
draw[thick] (0,0) ellipse [x radius=aa,y radius=bb];
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0)
coordinate (r) at ($(0,0)+(36:{aa} and {bb})$);
fill (c) circle (2pt)
(d) circle (2pt)
(r) circle (2pt);
Now I need
- a tangent vector to the ellipse through (r);
- a line parallel to this tangent through (c);
- a coordinate at the intersection of this last line with the line joining (r) and (d).
I cannot seem to find a solution to 1. that allows me to solve 2. and 3. Any suggestions, please?
tikz-pgf asymptote
I have specified an ellipse and three points in the following way:
defaa{2.5}
defbb{2}
draw[thick] (0,0) ellipse [x radius=aa,y radius=bb];
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0)
coordinate (r) at ($(0,0)+(36:{aa} and {bb})$);
fill (c) circle (2pt)
(d) circle (2pt)
(r) circle (2pt);
Now I need
- a tangent vector to the ellipse through (r);
- a line parallel to this tangent through (c);
- a coordinate at the intersection of this last line with the line joining (r) and (d).
I cannot seem to find a solution to 1. that allows me to solve 2. and 3. Any suggestions, please?
tikz-pgf asymptote
tikz-pgf asymptote
edited 13 mins ago
g.kov
17.4k13976
17.4k13976
asked Apr 10 '13 at 10:49
ZaefoxZaefox
636
636
2
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24
add a comment |
2
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24
2
2
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24
add a comment |
3 Answers
3
active
oldest
votes
Here's a way of accomplishing this using the approach from How to draw tangent line of an arbitrary point on a path in TikZ
documentclass[border=5mm]{standalone}
usepackage{tikz}
usetikzlibrary{calc, decorations.markings, intersections}
begin{document}
begin{tikzpicture}[
tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
coordinate (tangent point-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
coordinate (tangent unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
coordinate (tangent orthogonal unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1
]
defaa{3.5}
defbb{2}
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
draw[thick, tangent=0.07] (0,0) ellipse [x radius=aa,y radius=bb];
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0);
fill (c) circle (2pt)
(d) circle (2pt);
fill (tangent point-1) circle [radius=2pt];
draw [red, name path=rd] (tangent point-1) -- (d);
draw [use tangent] (2,0) -- (-2,0);
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
fill [red, name intersections={of={rd and parallel}}] (intersection-1) circle [radius=2pt];
end{tikzpicture}
end{document}
@jake: do you mind explaining the lastdraw
command? I cannot figure out why that ends up going through(c)
? Replacing(c)
with(0,0)
does not give the correct answer.
– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at(c)
instead of(tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking aboutdraw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through(c)
because nodes do not get transformed by the coordinate transformation (so while(0,0)
is at a different place if we useuse tangent
,(c)
is still at the same place).
– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
Very interesting, I discover with your answer the/pgf/decoration/mark info/sequence number
and how to use it
– Alain Matthes
Apr 10 '13 at 17:08
add a comment |
And Asymptote
version, ellipse.asy
along with a translation to tikz via svg
size(300);
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
real a=2.5, b=2, focus=sqrt(a*a-b*b);
pair c=(0,0), d=(-focus,0);
path el=ellipse(c,a,b);
path tline=rotate(36)*(c--(2a,0));
real tr=intersect(el,tline)[0];
pair r=point(el,tr);
pair tan_dir=dir(el,tr);
path tan_line=scale(b)*(-tan_dir--tan_dir);
pair w=intersectionpoint(d--r,shift(c)*tan_line);
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
draw(el,elPen); draw(d--r,linePen);
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
Dot(c,d,r,w);
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
run asy ellipse.asy
to get ellipse.eps
or asy -f pdf ellipse.asy
to get ellipse.pdf
.
Or put it inside the asy
environment in a LaTeX
document (see texdoc asymptote
).
Edit: Some comments added.
A user defined function to draw a list of dots, to be used later as Dot(c,d,r,w);
:
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
The function Dot
is defined with ... pair[] p
construction, that means
it is able to accept a variable number of arguments, all of them will be placed
in an array of pairs (2D coordinates) p[]
.
real a=2.5, b=2, focus=sqrt(a*a-b*b);
defines dimensions.
pair c=(0,0), d=(-focus,0);
defines points c
and d
by x,y
coordinates.
path el=ellipse(c,a,b);
defines a curve (ellipse outline) to be used later;
path tline=rotate(36)*(c--(2a,0));
defines a straight line as a rotated by 36 degrees horizontal line c--(2a,0)
real tr=intersect(el,tline)[0];
defines a so-called intersection time, a parameter t
for the path el
, which
corresponds to the point of intersection of tline
with the ellipse outline el
.
pair r=point(el,tr);
define the point of intersection itself.
pair tan_dir=dir(el,tr);
defines a tangent direction at the point r
(at time tr
).
path tan_line=scale(b)*(-tan_dir--tan_dir);
defines a line through the origin parallel to the tangent.
pair w=intersectionpoint(d--r,shift(c)*tan_line);
defines an intersection point of interest, between the line d--r
and a line parallel to the tangent through the origin (point c
).
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
defined are pens (color and width) to be used for lines and ellipse
draw(el,elPen); draw(d--r,linePen);
draw the ellipse and the line d--r
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
draw two parallel lines through points r
and c
, using defined function Dot
.
Dot(c,d,r,w);
draw fancy dots at all four points c,d,r,w
.
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
and finally, draw labels, formatted as a (La)TeX
string (e.g. "$C$"
)
at specified position (e.g. ,c
), oriented as specified (e.d. NE
means to the North-West of the point).
Edit2: tikz translation added
Thanks to Harish Kumar
for his answer [here][2], I've just installed inkscape2tikz
from [source][3] and after running asy -f svg ellipse.asy
svg2tikz ellipse.svg > ellipse.tex
here it is a LaTeX
document with tikz
solution, translated from the ellipse.asy
code shown above:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tikz}
begin{document}
definecolor{cff0000}{RGB}{255,0,0}
definecolor{c000040}{RGB}{0,0,64}
definecolor{cffffff}{RGB}{255,255,255}
begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
begin{scope}[cm={{0.996,0.0,0.0,0.996,(0.0,0.0)}}]
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=cff0000,line join=round,line cap=round,miter limit=10.04,line
width=1.200pt] (75.2812,0.0000) .. controls (75.2812,-33.2613) and
(41.5767,-60.2250) .. (0.0000,-60.2250) .. controls (-41.5767,-60.2250) and
(-75.2812,-33.2613) .. (-75.2812,-0.0000) .. controls (-75.2812,33.2613) and
(-41.5767,60.2250) .. (0.0000,60.2250) .. controls (41.5767,60.2250) and
(75.2812,33.2613) .. (75.2812,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (-45.1687,-0.0000) -- (55.7293,-40.4897);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (100.9330,-0.6942) -- (10.5257,-80.2853);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (45.2036,39.7955) -- (-45.2036,-39.7955);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (1.8068,0.0000) .. controls (1.8068,-0.9978) and
(0.9978,-1.8068) .. (0.0000,-1.8068) .. controls (-0.9978,-1.8068) and
(-1.8068,-0.9978) .. (-1.8068,-0.0000) .. controls (-1.8068,0.9978) and
(-0.9978,1.8068) .. (0.0000,1.8068) .. controls (0.9978,1.8068) and
(1.8068,0.9978) .. (1.8068,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (1.2045,0.0000) .. controls (1.2045,-0.6652) and
(0.6652,-1.2045) .. (0.0000,-1.2045) .. controls (-0.6652,-1.2045) and
(-1.2045,-0.6652) .. (-1.2045,-0.0000) .. controls (-1.2045,0.6652) and
(-0.6652,1.2045) .. (0.0000,1.2045) .. controls (0.6652,1.2045) and
(1.2045,0.6652) .. (1.2045,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-43.3620,-0.0000) .. controls (-43.3620,-0.9978) and
(-44.1709,-1.8068) .. (-45.1687,-1.8068) .. controls (-46.1666,-1.8068) and
(-46.9755,-0.9978) .. (-46.9755,-0.0000) .. controls (-46.9755,0.9978) and
(-46.1666,1.8068) .. (-45.1687,1.8068) .. controls (-44.1709,1.8068) and
(-43.3620,0.9978) .. (-43.3620,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-43.9642,-0.0000) .. controls (-43.9642,-0.6652) and
(-44.5035,-1.2045) .. (-45.1687,-1.2045) .. controls (-45.8340,-1.2045) and
(-46.3732,-0.6652) .. (-46.3732,-0.0000) .. controls (-46.3732,0.6652) and
(-45.8340,1.2045) .. (-45.1687,1.2045) .. controls (-44.5035,1.2045) and
(-43.9642,0.6652) .. (-43.9642,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (57.5361,-40.4897) .. controls (57.5361,-41.4876) and
(56.7272,-42.2965) .. (55.7293,-42.2965) .. controls (54.7315,-42.2965) and
(53.9226,-41.4876) .. (53.9226,-40.4897) .. controls (53.9226,-39.4919) and
(54.7315,-38.6830) .. (55.7293,-38.6830) .. controls (56.7272,-38.6830) and
(57.5361,-39.4919) .. (57.5361,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (56.9338,-40.4897) .. controls (56.9338,-41.1550) and
(56.3946,-41.6942) .. (55.7293,-41.6942) .. controls (55.0641,-41.6942) and
(54.5248,-41.1550) .. (54.5248,-40.4897) .. controls (54.5248,-39.8245) and
(55.0641,-39.2852) .. (55.7293,-39.2852) .. controls (56.3946,-39.2852) and
(56.9338,-39.8245) .. (56.9338,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-12.3358,-12.4506) .. controls (-12.3358,-13.4484) and
(-13.1447,-14.2573) .. (-14.1426,-14.2573) .. controls (-15.1404,-14.2573) and
(-15.9493,-13.4484) .. (-15.9493,-12.4506) .. controls (-15.9493,-11.4528) and
(-15.1404,-10.6438) .. (-14.1426,-10.6438) .. controls (-13.1447,-10.6438) and
(-12.3358,-11.4528) .. (-12.3358,-12.4506) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-12.9381,-12.4506) .. controls (-12.9381,-13.1158) and
(-13.4774,-13.6551) .. (-14.1426,-13.6551) .. controls (-14.8078,-13.6551) and
(-15.3471,-13.1158) .. (-15.3471,-12.4506) .. controls (-15.3471,-11.7854) and
(-14.8078,-11.2461) .. (-14.1426,-11.2461) .. controls (-13.4774,-11.2461) and
(-12.9381,-11.7854) .. (-12.9381,-12.4506) -- cycle;
end{scope}
begin{scope}[shift={(209.733,171.904)}]
path (8.9640,-8.3400) .. controls (8.9640,-8.4480) and (8.8800,-8.4480) ..
(8.8560,-8.4480) .. controls (8.8320,-8.4480) and (8.7840,-8.4480) ..
(8.6880,-8.3280) -- (7.8600,-7.3200) .. controls (7.4400,-8.0400) and
(6.7800,-8.4480) .. (5.8800,-8.4480) .. controls (3.2880,-8.4480) and
(0.6000,-5.8200) .. (0.6000,-3.0000) .. controls (0.6000,-0.9960) and
(2.0040,0.2520) .. (3.7560,0.2520) .. controls (4.7160,0.2520) and
(5.5560,-0.1560) .. (6.2520,-0.7440) .. controls (7.2960,-1.6200) and
(7.6080,-2.7840) .. (7.6080,-2.8800) .. controls (7.6080,-2.9880) and
(7.5120,-2.9880) .. (7.4760,-2.9880) .. controls (7.3680,-2.9880) and
(7.3560,-2.9160) .. (7.3320,-2.8680) .. controls (6.7800,-0.9960) and
(5.1600,-0.0960) .. (3.9600,-0.0960) .. controls (2.6880,-0.0960) and
(1.5840,-0.9120) .. (1.5840,-2.6160) .. controls (1.5840,-3.0000) and
(1.7040,-5.0880) .. (3.0600,-6.6600) .. controls (3.7200,-7.4280) and
(4.8480,-8.1000) .. (5.9880,-8.1000) .. controls (7.3080,-8.1000) and
(7.8960,-7.0080) .. (7.8960,-5.7840) .. controls (7.8960,-5.4720) and
(7.8600,-5.2080) .. (7.8600,-5.1600) .. controls (7.8600,-5.0520) and
(7.9800,-5.0520) .. (8.0160,-5.0520) .. controls (8.1480,-5.0520) and
(8.1600,-5.0640) .. (8.2080,-5.2800) -- (8.9640,-8.3400) -- cycle;
end{scope}
begin{scope}[shift={(149.391,171.904)}]
path (1.8840,-0.8880) .. controls (1.7760,-0.4680) and (1.7520,-0.3480) ..
(0.9120,-0.3480) .. controls (0.6840,-0.3480) and (0.5640,-0.3480) ..
(0.5640,-0.1320) .. controls (0.5640,0.0000) and (0.6360,0.0000) ..
(0.8760,0.0000) -- (4.6800,0.0000) .. controls (7.1040,0.0000) and
(9.4680,-2.5080) .. (9.4680,-5.1840) .. controls (9.4680,-6.9120) and
(8.4360,-8.1960) .. (6.7200,-8.1960) -- (2.8680,-8.1960) .. controls
(2.6400,-8.1960) and (2.5320,-8.1960) .. (2.5320,-7.9680) .. controls
(2.5320,-7.8480) and (2.6400,-7.8480) .. (2.8200,-7.8480) .. controls
(3.5520,-7.8480) and (3.5520,-7.7520) .. (3.5520,-7.6200) .. controls
(3.5520,-7.5960) and (3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880)
-- cycle(4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (6.3600,-7.8480) .. controls (7.4880,-7.8480) and
(8.5200,-7.2360) .. (8.5200,-5.5800) .. controls (8.5200,-4.9800) and
(8.2800,-2.8920) .. (7.1160,-1.5720) .. controls (6.7800,-1.1760) and
(5.8680,-0.3480) .. (4.4880,-0.3480) -- (3.1200,-0.3480) .. controls
(2.9520,-0.3480) and (2.9280,-0.3480) .. (2.8560,-0.3600) .. controls
(2.7240,-0.3720) and (2.7120,-0.3960) .. (2.7120,-0.4920) .. controls
(2.7120,-0.5760) and (2.7360,-0.6480) .. (2.7600,-0.7560) -- (4.4160,-7.3800)
-- cycle;
end{scope}
begin{scope}[shift={(265.462,131.415)}]
path (4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (5.9040,-7.8480) .. controls (6.9360,-7.8480) and
(7.7040,-7.5360) .. (7.7040,-6.6000) .. controls (7.7040,-5.9880) and
(7.3920,-4.2240) .. (4.9800,-4.2240) -- (3.6240,-4.2240) -- (4.4160,-7.3800)
-- cycle(6.0840,-4.0800) .. controls (7.5720,-4.4040) and (8.7360,-5.3640) ..
(8.7360,-6.3960) .. controls (8.7360,-7.3320) and (7.7880,-8.1960) ..
(6.1200,-8.1960) -- (2.8680,-8.1960) .. controls (2.6280,-8.1960) and
(2.5200,-8.1960) .. (2.5200,-7.9680) .. controls (2.5200,-7.8480) and
(2.6040,-7.8480) .. (2.8320,-7.8480) .. controls (3.5520,-7.8480) and
(3.5520,-7.7520) .. (3.5520,-7.6200) .. controls (3.5520,-7.5960) and
(3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880) .. controls
(1.7760,-0.4680) and (1.7520,-0.3480) .. (0.9240,-0.3480) .. controls
(0.6480,-0.3480) and (0.5640,-0.3480) .. (0.5640,-0.1200) .. controls
(0.5640,0.0000) and (0.6960,0.0000) .. (0.7320,0.0000) .. controls
(0.9480,0.0000) and (1.2000,-0.0240) .. (1.4280,-0.0240) -- (2.8440,-0.0240)
.. controls (3.0600,-0.0240) and (3.3120,0.0000) .. (3.5280,0.0000) ..
controls (3.6240,0.0000) and (3.7560,0.0000) .. (3.7560,-0.2280) .. controls
(3.7560,-0.3480) and (3.6480,-0.3480) .. (3.4680,-0.3480) .. controls
(2.7360,-0.3480) and (2.7360,-0.4440) .. (2.7360,-0.5640) .. controls
(2.7360,-0.5760) and (2.7360,-0.6600) .. (2.7600,-0.7560) -- (3.5640,-3.9840)
-- (5.0040,-3.9840) .. controls (6.1440,-3.9840) and (6.3600,-3.2640) ..
(6.3600,-2.8680) .. controls (6.3600,-2.6880) and (6.2400,-2.2200) ..
(6.1560,-1.9080) .. controls (6.0240,-1.3560) and (5.9880,-1.2240) ..
(5.9880,-0.9960) .. controls (5.9880,-0.1440) and (6.6840,0.2520) ..
(7.4880,0.2520) .. controls (8.4600,0.2520) and (8.8800,-0.9360) ..
(8.8800,-1.1040) .. controls (8.8800,-1.1880) and (8.8200,-1.2240) ..
(8.7480,-1.2240) .. controls (8.6520,-1.2240) and (8.6280,-1.1520) ..
(8.6040,-1.0560) .. controls (8.3160,-0.2040) and (7.8240,0.0120) ..
(7.5240,0.0120) .. controls (7.2240,0.0120) and (7.0320,-0.1200) ..
(7.0320,-0.6600) .. controls (7.0320,-0.9480) and (7.1760,-2.0400) ..
(7.1880,-2.1000) .. controls (7.2480,-2.5440) and (7.2480,-2.5920) ..
(7.2480,-2.6880) .. controls (7.2480,-3.5640) and (6.5400,-3.9360) ..
(6.0840,-4.0800) -- cycle;
end{scope}
begin{scope}[shift={(186.682,173.799)}]
path (10.8360,-6.8640) .. controls (11.1120,-7.3320) and (11.3760,-7.7760) ..
(12.0960,-7.8480) .. controls (12.2040,-7.8600) and (12.3120,-7.8720) ..
(12.3120,-8.0640) .. controls (12.3120,-8.1960) and (12.2040,-8.1960) ..
(12.1680,-8.1960) .. controls (12.1440,-8.1960) and (12.0600,-8.1720) ..
(11.2680,-8.1720) .. controls (10.9080,-8.1720) and (10.5360,-8.1960) ..
(10.1880,-8.1960) .. controls (10.1160,-8.1960) and (9.9720,-8.1960) ..
(9.9720,-7.9680) .. controls (9.9720,-7.8600) and (10.0680,-7.8480) ..
(10.1400,-7.8480) .. controls (10.3800,-7.8360) and (10.7640,-7.7640) ..
(10.7640,-7.3920) .. controls (10.7640,-7.2360) and (10.7160,-7.1520) ..
(10.5960,-6.9480) -- (7.3200,-1.2120) -- (6.8880,-7.4640) .. controls
(6.8880,-7.6080) and (7.0200,-7.8360) .. (7.6920,-7.8480) .. controls
(7.8480,-7.8480) and (7.9680,-7.8480) .. (7.9680,-8.0760) .. controls
(7.9680,-8.1960) and (7.8480,-8.1960) .. (7.7880,-8.1960) .. controls
(7.3680,-8.1960) and (6.9240,-8.1720) .. (6.4920,-8.1720) -- (5.8680,-8.1720)
.. controls (5.6880,-8.1720) and (5.4720,-8.1960) .. (5.2920,-8.1960) ..
controls (5.2200,-8.1960) and (5.0760,-8.1960) .. (5.0760,-7.9680) .. controls
(5.0760,-7.8480) and (5.1600,-7.8480) .. (5.3640,-7.8480) .. controls
(5.9160,-7.8480) and (5.9160,-7.8360) .. (5.9640,-7.1040) -- (6.0000,-6.6720)
-- (2.8920,-1.2120) -- (2.4480,-7.4040) .. controls (2.4480,-7.5360) and
(2.4480,-7.8360) .. (3.2640,-7.8480) .. controls (3.3960,-7.8480) and
(3.5280,-7.8480) .. (3.5280,-8.0640) .. controls (3.5280,-8.1960) and
(3.4200,-8.1960) .. (3.3480,-8.1960) .. controls (2.9280,-8.1960) and
(2.4840,-8.1720) .. (2.0520,-8.1720) -- (1.4280,-8.1720) .. controls
(1.2480,-8.1720) and (1.0320,-8.1960) .. (0.8520,-8.1960) .. controls
(0.7800,-8.1960) and (0.6360,-8.1960) .. (0.6360,-7.9680) .. controls
(0.6360,-7.8480) and (0.7320,-7.8480) .. (0.9000,-7.8480) .. controls
(1.4640,-7.8480) and (1.4760,-7.7760) .. (1.5000,-7.3920) -- (2.0280,-0.0240)
.. controls (2.0400,0.1800) and (2.0520,0.2520) .. (2.1960,0.2520) .. controls
(2.3160,0.2520) and (2.3400,0.2040) .. (2.4480,0.0240) -- (6.0240,-6.2280) --
(6.4680,-0.0240) .. controls (6.4800,0.1800) and (6.4920,0.2520) ..
(6.6360,0.2520) .. controls (6.7560,0.2520) and (6.7920,0.1920) ..
(6.8880,0.0240) -- (10.8360,-6.8640) -- cycle;
end{scope}
end{scope}
end{tikzpicture}
end{document}
The graphics looks fine, but the labels vanished somehow.
add a comment |
With PSTricks and explanation.
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
edefA{2}% semi-major
edefB{1}% semi-minor
edefCx{3}% center abscissa
edefCy{3}% center ordinate
% parametric representation of an ellipse
edefX(#1){A*cos(#1)+Cx}
edefY(#1){B*sin(#1)+Cy}
% the left focus point in RPN notation
% [-sqrt(A^2-B^2)+Cx,Cy]
edefF{!Aspace 2 exp Bspace 2 exp sub sqrt neg Cxspace add
Cy }
psset{algebraic}
begin{document}
begin{pspicture}[showgrid](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}% plot the ellipse from 0 to 2*pi
curvepnode{Pi 4 div}{X(t)|Y(t)}{P}% define the point P through which the tangent line passes
% curvepnode also produces a unit tangent vector named Ptang
%----------------------------------------------------------------------------------------------
pnode(Cx,Cy){C}% define the center
pnode(F){F}% define the focus
%----------------------------------------------------------------------------------------------
nodexn{-2(Ptang)+(C)}{S}% vector S = -2 Ptang + C
nodexn{2(Ptang)+(C)}{T}% vector T = 2 Ptang + C
%-----------------------------------------------------------------------------------------------
psline[linecolor=red](S)(T)% draw the line passing through C and parallel to the unit tangent vector
psxline[linecolor=green](P){(S)-(C)}{(T)-(C)}% draw a line from vector P + S - C to P + T - C
pcline[nodesep=-1,linecolor=blue](F)(P)% drawn a line from F to P
pstInterLL[PointName=none]{F}{P}{S}{T}{I}% find the intersection point I between line FP and ST
psdots(P)(C)(F)% draw the points P, C, F
end{pspicture}
end{document}
Animation
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
usepackage[nomessages]{fp}
defX(#1){2*cos(#1)+3}
defY(#1){sin(#1)+3}
FPsetN{20}
FPevalStep{round(2*pi/N:2)}
psset{algebraic,unit=0.5}
begin{document}
multido{n=0.00+Step}{N}{%
begin{pspicture*}[showgrid=false](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}
curvepnode{n}{X(t)|Y(t)}{P}
pnode(3,3){Q}
pnode(!3 sqrt neg 3 add 3){F}
nodexn{-3(Ptang)+(Q)}{A}
nodexn{3(Ptang)+(Q)}{B}
psline[linecolor=red](A)(B)
psxline[linecolor=green](P){(A)-(Q)}{(B)-(Q)}
pcline[nodesep=-2,linecolor=blue](F)(P)
pstInterLL[PointName=none]{F}{P}{A}{B}{I}
psdots(P)(Q)(F)
end{pspicture*}}
end{document}
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f107902%2fhow-do-i-make-tangents-to-ellipses-and-lines-parallel-to-these%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here's a way of accomplishing this using the approach from How to draw tangent line of an arbitrary point on a path in TikZ
documentclass[border=5mm]{standalone}
usepackage{tikz}
usetikzlibrary{calc, decorations.markings, intersections}
begin{document}
begin{tikzpicture}[
tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
coordinate (tangent point-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
coordinate (tangent unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
coordinate (tangent orthogonal unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1
]
defaa{3.5}
defbb{2}
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
draw[thick, tangent=0.07] (0,0) ellipse [x radius=aa,y radius=bb];
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0);
fill (c) circle (2pt)
(d) circle (2pt);
fill (tangent point-1) circle [radius=2pt];
draw [red, name path=rd] (tangent point-1) -- (d);
draw [use tangent] (2,0) -- (-2,0);
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
fill [red, name intersections={of={rd and parallel}}] (intersection-1) circle [radius=2pt];
end{tikzpicture}
end{document}
@jake: do you mind explaining the lastdraw
command? I cannot figure out why that ends up going through(c)
? Replacing(c)
with(0,0)
does not give the correct answer.
– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at(c)
instead of(tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking aboutdraw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through(c)
because nodes do not get transformed by the coordinate transformation (so while(0,0)
is at a different place if we useuse tangent
,(c)
is still at the same place).
– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
Very interesting, I discover with your answer the/pgf/decoration/mark info/sequence number
and how to use it
– Alain Matthes
Apr 10 '13 at 17:08
add a comment |
Here's a way of accomplishing this using the approach from How to draw tangent line of an arbitrary point on a path in TikZ
documentclass[border=5mm]{standalone}
usepackage{tikz}
usetikzlibrary{calc, decorations.markings, intersections}
begin{document}
begin{tikzpicture}[
tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
coordinate (tangent point-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
coordinate (tangent unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
coordinate (tangent orthogonal unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1
]
defaa{3.5}
defbb{2}
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
draw[thick, tangent=0.07] (0,0) ellipse [x radius=aa,y radius=bb];
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0);
fill (c) circle (2pt)
(d) circle (2pt);
fill (tangent point-1) circle [radius=2pt];
draw [red, name path=rd] (tangent point-1) -- (d);
draw [use tangent] (2,0) -- (-2,0);
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
fill [red, name intersections={of={rd and parallel}}] (intersection-1) circle [radius=2pt];
end{tikzpicture}
end{document}
@jake: do you mind explaining the lastdraw
command? I cannot figure out why that ends up going through(c)
? Replacing(c)
with(0,0)
does not give the correct answer.
– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at(c)
instead of(tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking aboutdraw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through(c)
because nodes do not get transformed by the coordinate transformation (so while(0,0)
is at a different place if we useuse tangent
,(c)
is still at the same place).
– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
Very interesting, I discover with your answer the/pgf/decoration/mark info/sequence number
and how to use it
– Alain Matthes
Apr 10 '13 at 17:08
add a comment |
Here's a way of accomplishing this using the approach from How to draw tangent line of an arbitrary point on a path in TikZ
documentclass[border=5mm]{standalone}
usepackage{tikz}
usetikzlibrary{calc, decorations.markings, intersections}
begin{document}
begin{tikzpicture}[
tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
coordinate (tangent point-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
coordinate (tangent unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
coordinate (tangent orthogonal unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1
]
defaa{3.5}
defbb{2}
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
draw[thick, tangent=0.07] (0,0) ellipse [x radius=aa,y radius=bb];
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0);
fill (c) circle (2pt)
(d) circle (2pt);
fill (tangent point-1) circle [radius=2pt];
draw [red, name path=rd] (tangent point-1) -- (d);
draw [use tangent] (2,0) -- (-2,0);
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
fill [red, name intersections={of={rd and parallel}}] (intersection-1) circle [radius=2pt];
end{tikzpicture}
end{document}
Here's a way of accomplishing this using the approach from How to draw tangent line of an arbitrary point on a path in TikZ
documentclass[border=5mm]{standalone}
usepackage{tikz}
usetikzlibrary{calc, decorations.markings, intersections}
begin{document}
begin{tikzpicture}[
tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
coordinate (tangent point-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
coordinate (tangent unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
coordinate (tangent orthogonal unit vector-pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1
]
defaa{3.5}
defbb{2}
pgfmathsetmacro{focus}{sqrt(aa*aa-bb*bb)}
draw[thick, tangent=0.07] (0,0) ellipse [x radius=aa,y radius=bb];
path coordinate (c) at (0,0)
coordinate (d) at (-focus,0);
fill (c) circle (2pt)
(d) circle (2pt);
fill (tangent point-1) circle [radius=2pt];
draw [red, name path=rd] (tangent point-1) -- (d);
draw [use tangent] (2,0) -- (-2,0);
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
fill [red, name intersections={of={rd and parallel}}] (intersection-1) circle [radius=2pt];
end{tikzpicture}
end{document}
edited Apr 13 '17 at 12:34
Community♦
1
1
answered Apr 10 '13 at 11:48
JakeJake
195k24653762
195k24653762
@jake: do you mind explaining the lastdraw
command? I cannot figure out why that ends up going through(c)
? Replacing(c)
with(0,0)
does not give the correct answer.
– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at(c)
instead of(tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking aboutdraw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through(c)
because nodes do not get transformed by the coordinate transformation (so while(0,0)
is at a different place if we useuse tangent
,(c)
is still at the same place).
– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
Very interesting, I discover with your answer the/pgf/decoration/mark info/sequence number
and how to use it
– Alain Matthes
Apr 10 '13 at 17:08
add a comment |
@jake: do you mind explaining the lastdraw
command? I cannot figure out why that ends up going through(c)
? Replacing(c)
with(0,0)
does not give the correct answer.
– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at(c)
instead of(tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking aboutdraw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through(c)
because nodes do not get transformed by the coordinate transformation (so while(0,0)
is at a different place if we useuse tangent
,(c)
is still at the same place).
– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
Very interesting, I discover with your answer the/pgf/decoration/mark info/sequence number
and how to use it
– Alain Matthes
Apr 10 '13 at 17:08
@jake: do you mind explaining the last
draw
command? I cannot figure out why that ends up going through (c)
? Replacing (c)
with (0,0)
does not give the correct answer.– daleif
Apr 10 '13 at 13:42
@jake: do you mind explaining the last
draw
command? I cannot figure out why that ends up going through (c)
? Replacing (c)
with (0,0)
does not give the correct answer.– daleif
Apr 10 '13 at 13:42
@jake, I know, but I do not understand why it ends up at
(c)
instead of (tangent point-1)
– daleif
Apr 10 '13 at 14:04
@jake, I know, but I do not understand why it ends up at
(c)
instead of (tangent point-1)
– daleif
Apr 10 '13 at 14:04
@daleif: We are talking about
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through (c)
because nodes do not get transformed by the coordinate transformation (so while (0,0)
is at a different place if we use use tangent
, (c)
is still at the same place).– Jake
Apr 10 '13 at 14:08
@daleif: We are talking about
draw [use tangent, red, name path=parallel] (c) ++(2,0) -- +(-4,0);
, right? The line goes through (c)
because nodes do not get transformed by the coordinate transformation (so while (0,0)
is at a different place if we use use tangent
, (c)
is still at the same place).– Jake
Apr 10 '13 at 14:08
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
@jake that is it, takes a bit you get ones head twisted through that one.
– daleif
Apr 10 '13 at 14:10
1
1
Very interesting, I discover with your answer the
/pgf/decoration/mark info/sequence number
and how to use it– Alain Matthes
Apr 10 '13 at 17:08
Very interesting, I discover with your answer the
/pgf/decoration/mark info/sequence number
and how to use it– Alain Matthes
Apr 10 '13 at 17:08
add a comment |
And Asymptote
version, ellipse.asy
along with a translation to tikz via svg
size(300);
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
real a=2.5, b=2, focus=sqrt(a*a-b*b);
pair c=(0,0), d=(-focus,0);
path el=ellipse(c,a,b);
path tline=rotate(36)*(c--(2a,0));
real tr=intersect(el,tline)[0];
pair r=point(el,tr);
pair tan_dir=dir(el,tr);
path tan_line=scale(b)*(-tan_dir--tan_dir);
pair w=intersectionpoint(d--r,shift(c)*tan_line);
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
draw(el,elPen); draw(d--r,linePen);
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
Dot(c,d,r,w);
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
run asy ellipse.asy
to get ellipse.eps
or asy -f pdf ellipse.asy
to get ellipse.pdf
.
Or put it inside the asy
environment in a LaTeX
document (see texdoc asymptote
).
Edit: Some comments added.
A user defined function to draw a list of dots, to be used later as Dot(c,d,r,w);
:
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
The function Dot
is defined with ... pair[] p
construction, that means
it is able to accept a variable number of arguments, all of them will be placed
in an array of pairs (2D coordinates) p[]
.
real a=2.5, b=2, focus=sqrt(a*a-b*b);
defines dimensions.
pair c=(0,0), d=(-focus,0);
defines points c
and d
by x,y
coordinates.
path el=ellipse(c,a,b);
defines a curve (ellipse outline) to be used later;
path tline=rotate(36)*(c--(2a,0));
defines a straight line as a rotated by 36 degrees horizontal line c--(2a,0)
real tr=intersect(el,tline)[0];
defines a so-called intersection time, a parameter t
for the path el
, which
corresponds to the point of intersection of tline
with the ellipse outline el
.
pair r=point(el,tr);
define the point of intersection itself.
pair tan_dir=dir(el,tr);
defines a tangent direction at the point r
(at time tr
).
path tan_line=scale(b)*(-tan_dir--tan_dir);
defines a line through the origin parallel to the tangent.
pair w=intersectionpoint(d--r,shift(c)*tan_line);
defines an intersection point of interest, between the line d--r
and a line parallel to the tangent through the origin (point c
).
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
defined are pens (color and width) to be used for lines and ellipse
draw(el,elPen); draw(d--r,linePen);
draw the ellipse and the line d--r
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
draw two parallel lines through points r
and c
, using defined function Dot
.
Dot(c,d,r,w);
draw fancy dots at all four points c,d,r,w
.
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
and finally, draw labels, formatted as a (La)TeX
string (e.g. "$C$"
)
at specified position (e.g. ,c
), oriented as specified (e.d. NE
means to the North-West of the point).
Edit2: tikz translation added
Thanks to Harish Kumar
for his answer [here][2], I've just installed inkscape2tikz
from [source][3] and after running asy -f svg ellipse.asy
svg2tikz ellipse.svg > ellipse.tex
here it is a LaTeX
document with tikz
solution, translated from the ellipse.asy
code shown above:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tikz}
begin{document}
definecolor{cff0000}{RGB}{255,0,0}
definecolor{c000040}{RGB}{0,0,64}
definecolor{cffffff}{RGB}{255,255,255}
begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
begin{scope}[cm={{0.996,0.0,0.0,0.996,(0.0,0.0)}}]
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=cff0000,line join=round,line cap=round,miter limit=10.04,line
width=1.200pt] (75.2812,0.0000) .. controls (75.2812,-33.2613) and
(41.5767,-60.2250) .. (0.0000,-60.2250) .. controls (-41.5767,-60.2250) and
(-75.2812,-33.2613) .. (-75.2812,-0.0000) .. controls (-75.2812,33.2613) and
(-41.5767,60.2250) .. (0.0000,60.2250) .. controls (41.5767,60.2250) and
(75.2812,33.2613) .. (75.2812,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (-45.1687,-0.0000) -- (55.7293,-40.4897);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (100.9330,-0.6942) -- (10.5257,-80.2853);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (45.2036,39.7955) -- (-45.2036,-39.7955);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (1.8068,0.0000) .. controls (1.8068,-0.9978) and
(0.9978,-1.8068) .. (0.0000,-1.8068) .. controls (-0.9978,-1.8068) and
(-1.8068,-0.9978) .. (-1.8068,-0.0000) .. controls (-1.8068,0.9978) and
(-0.9978,1.8068) .. (0.0000,1.8068) .. controls (0.9978,1.8068) and
(1.8068,0.9978) .. (1.8068,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (1.2045,0.0000) .. controls (1.2045,-0.6652) and
(0.6652,-1.2045) .. (0.0000,-1.2045) .. controls (-0.6652,-1.2045) and
(-1.2045,-0.6652) .. (-1.2045,-0.0000) .. controls (-1.2045,0.6652) and
(-0.6652,1.2045) .. (0.0000,1.2045) .. controls (0.6652,1.2045) and
(1.2045,0.6652) .. (1.2045,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-43.3620,-0.0000) .. controls (-43.3620,-0.9978) and
(-44.1709,-1.8068) .. (-45.1687,-1.8068) .. controls (-46.1666,-1.8068) and
(-46.9755,-0.9978) .. (-46.9755,-0.0000) .. controls (-46.9755,0.9978) and
(-46.1666,1.8068) .. (-45.1687,1.8068) .. controls (-44.1709,1.8068) and
(-43.3620,0.9978) .. (-43.3620,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-43.9642,-0.0000) .. controls (-43.9642,-0.6652) and
(-44.5035,-1.2045) .. (-45.1687,-1.2045) .. controls (-45.8340,-1.2045) and
(-46.3732,-0.6652) .. (-46.3732,-0.0000) .. controls (-46.3732,0.6652) and
(-45.8340,1.2045) .. (-45.1687,1.2045) .. controls (-44.5035,1.2045) and
(-43.9642,0.6652) .. (-43.9642,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (57.5361,-40.4897) .. controls (57.5361,-41.4876) and
(56.7272,-42.2965) .. (55.7293,-42.2965) .. controls (54.7315,-42.2965) and
(53.9226,-41.4876) .. (53.9226,-40.4897) .. controls (53.9226,-39.4919) and
(54.7315,-38.6830) .. (55.7293,-38.6830) .. controls (56.7272,-38.6830) and
(57.5361,-39.4919) .. (57.5361,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (56.9338,-40.4897) .. controls (56.9338,-41.1550) and
(56.3946,-41.6942) .. (55.7293,-41.6942) .. controls (55.0641,-41.6942) and
(54.5248,-41.1550) .. (54.5248,-40.4897) .. controls (54.5248,-39.8245) and
(55.0641,-39.2852) .. (55.7293,-39.2852) .. controls (56.3946,-39.2852) and
(56.9338,-39.8245) .. (56.9338,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-12.3358,-12.4506) .. controls (-12.3358,-13.4484) and
(-13.1447,-14.2573) .. (-14.1426,-14.2573) .. controls (-15.1404,-14.2573) and
(-15.9493,-13.4484) .. (-15.9493,-12.4506) .. controls (-15.9493,-11.4528) and
(-15.1404,-10.6438) .. (-14.1426,-10.6438) .. controls (-13.1447,-10.6438) and
(-12.3358,-11.4528) .. (-12.3358,-12.4506) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-12.9381,-12.4506) .. controls (-12.9381,-13.1158) and
(-13.4774,-13.6551) .. (-14.1426,-13.6551) .. controls (-14.8078,-13.6551) and
(-15.3471,-13.1158) .. (-15.3471,-12.4506) .. controls (-15.3471,-11.7854) and
(-14.8078,-11.2461) .. (-14.1426,-11.2461) .. controls (-13.4774,-11.2461) and
(-12.9381,-11.7854) .. (-12.9381,-12.4506) -- cycle;
end{scope}
begin{scope}[shift={(209.733,171.904)}]
path (8.9640,-8.3400) .. controls (8.9640,-8.4480) and (8.8800,-8.4480) ..
(8.8560,-8.4480) .. controls (8.8320,-8.4480) and (8.7840,-8.4480) ..
(8.6880,-8.3280) -- (7.8600,-7.3200) .. controls (7.4400,-8.0400) and
(6.7800,-8.4480) .. (5.8800,-8.4480) .. controls (3.2880,-8.4480) and
(0.6000,-5.8200) .. (0.6000,-3.0000) .. controls (0.6000,-0.9960) and
(2.0040,0.2520) .. (3.7560,0.2520) .. controls (4.7160,0.2520) and
(5.5560,-0.1560) .. (6.2520,-0.7440) .. controls (7.2960,-1.6200) and
(7.6080,-2.7840) .. (7.6080,-2.8800) .. controls (7.6080,-2.9880) and
(7.5120,-2.9880) .. (7.4760,-2.9880) .. controls (7.3680,-2.9880) and
(7.3560,-2.9160) .. (7.3320,-2.8680) .. controls (6.7800,-0.9960) and
(5.1600,-0.0960) .. (3.9600,-0.0960) .. controls (2.6880,-0.0960) and
(1.5840,-0.9120) .. (1.5840,-2.6160) .. controls (1.5840,-3.0000) and
(1.7040,-5.0880) .. (3.0600,-6.6600) .. controls (3.7200,-7.4280) and
(4.8480,-8.1000) .. (5.9880,-8.1000) .. controls (7.3080,-8.1000) and
(7.8960,-7.0080) .. (7.8960,-5.7840) .. controls (7.8960,-5.4720) and
(7.8600,-5.2080) .. (7.8600,-5.1600) .. controls (7.8600,-5.0520) and
(7.9800,-5.0520) .. (8.0160,-5.0520) .. controls (8.1480,-5.0520) and
(8.1600,-5.0640) .. (8.2080,-5.2800) -- (8.9640,-8.3400) -- cycle;
end{scope}
begin{scope}[shift={(149.391,171.904)}]
path (1.8840,-0.8880) .. controls (1.7760,-0.4680) and (1.7520,-0.3480) ..
(0.9120,-0.3480) .. controls (0.6840,-0.3480) and (0.5640,-0.3480) ..
(0.5640,-0.1320) .. controls (0.5640,0.0000) and (0.6360,0.0000) ..
(0.8760,0.0000) -- (4.6800,0.0000) .. controls (7.1040,0.0000) and
(9.4680,-2.5080) .. (9.4680,-5.1840) .. controls (9.4680,-6.9120) and
(8.4360,-8.1960) .. (6.7200,-8.1960) -- (2.8680,-8.1960) .. controls
(2.6400,-8.1960) and (2.5320,-8.1960) .. (2.5320,-7.9680) .. controls
(2.5320,-7.8480) and (2.6400,-7.8480) .. (2.8200,-7.8480) .. controls
(3.5520,-7.8480) and (3.5520,-7.7520) .. (3.5520,-7.6200) .. controls
(3.5520,-7.5960) and (3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880)
-- cycle(4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (6.3600,-7.8480) .. controls (7.4880,-7.8480) and
(8.5200,-7.2360) .. (8.5200,-5.5800) .. controls (8.5200,-4.9800) and
(8.2800,-2.8920) .. (7.1160,-1.5720) .. controls (6.7800,-1.1760) and
(5.8680,-0.3480) .. (4.4880,-0.3480) -- (3.1200,-0.3480) .. controls
(2.9520,-0.3480) and (2.9280,-0.3480) .. (2.8560,-0.3600) .. controls
(2.7240,-0.3720) and (2.7120,-0.3960) .. (2.7120,-0.4920) .. controls
(2.7120,-0.5760) and (2.7360,-0.6480) .. (2.7600,-0.7560) -- (4.4160,-7.3800)
-- cycle;
end{scope}
begin{scope}[shift={(265.462,131.415)}]
path (4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (5.9040,-7.8480) .. controls (6.9360,-7.8480) and
(7.7040,-7.5360) .. (7.7040,-6.6000) .. controls (7.7040,-5.9880) and
(7.3920,-4.2240) .. (4.9800,-4.2240) -- (3.6240,-4.2240) -- (4.4160,-7.3800)
-- cycle(6.0840,-4.0800) .. controls (7.5720,-4.4040) and (8.7360,-5.3640) ..
(8.7360,-6.3960) .. controls (8.7360,-7.3320) and (7.7880,-8.1960) ..
(6.1200,-8.1960) -- (2.8680,-8.1960) .. controls (2.6280,-8.1960) and
(2.5200,-8.1960) .. (2.5200,-7.9680) .. controls (2.5200,-7.8480) and
(2.6040,-7.8480) .. (2.8320,-7.8480) .. controls (3.5520,-7.8480) and
(3.5520,-7.7520) .. (3.5520,-7.6200) .. controls (3.5520,-7.5960) and
(3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880) .. controls
(1.7760,-0.4680) and (1.7520,-0.3480) .. (0.9240,-0.3480) .. controls
(0.6480,-0.3480) and (0.5640,-0.3480) .. (0.5640,-0.1200) .. controls
(0.5640,0.0000) and (0.6960,0.0000) .. (0.7320,0.0000) .. controls
(0.9480,0.0000) and (1.2000,-0.0240) .. (1.4280,-0.0240) -- (2.8440,-0.0240)
.. controls (3.0600,-0.0240) and (3.3120,0.0000) .. (3.5280,0.0000) ..
controls (3.6240,0.0000) and (3.7560,0.0000) .. (3.7560,-0.2280) .. controls
(3.7560,-0.3480) and (3.6480,-0.3480) .. (3.4680,-0.3480) .. controls
(2.7360,-0.3480) and (2.7360,-0.4440) .. (2.7360,-0.5640) .. controls
(2.7360,-0.5760) and (2.7360,-0.6600) .. (2.7600,-0.7560) -- (3.5640,-3.9840)
-- (5.0040,-3.9840) .. controls (6.1440,-3.9840) and (6.3600,-3.2640) ..
(6.3600,-2.8680) .. controls (6.3600,-2.6880) and (6.2400,-2.2200) ..
(6.1560,-1.9080) .. controls (6.0240,-1.3560) and (5.9880,-1.2240) ..
(5.9880,-0.9960) .. controls (5.9880,-0.1440) and (6.6840,0.2520) ..
(7.4880,0.2520) .. controls (8.4600,0.2520) and (8.8800,-0.9360) ..
(8.8800,-1.1040) .. controls (8.8800,-1.1880) and (8.8200,-1.2240) ..
(8.7480,-1.2240) .. controls (8.6520,-1.2240) and (8.6280,-1.1520) ..
(8.6040,-1.0560) .. controls (8.3160,-0.2040) and (7.8240,0.0120) ..
(7.5240,0.0120) .. controls (7.2240,0.0120) and (7.0320,-0.1200) ..
(7.0320,-0.6600) .. controls (7.0320,-0.9480) and (7.1760,-2.0400) ..
(7.1880,-2.1000) .. controls (7.2480,-2.5440) and (7.2480,-2.5920) ..
(7.2480,-2.6880) .. controls (7.2480,-3.5640) and (6.5400,-3.9360) ..
(6.0840,-4.0800) -- cycle;
end{scope}
begin{scope}[shift={(186.682,173.799)}]
path (10.8360,-6.8640) .. controls (11.1120,-7.3320) and (11.3760,-7.7760) ..
(12.0960,-7.8480) .. controls (12.2040,-7.8600) and (12.3120,-7.8720) ..
(12.3120,-8.0640) .. controls (12.3120,-8.1960) and (12.2040,-8.1960) ..
(12.1680,-8.1960) .. controls (12.1440,-8.1960) and (12.0600,-8.1720) ..
(11.2680,-8.1720) .. controls (10.9080,-8.1720) and (10.5360,-8.1960) ..
(10.1880,-8.1960) .. controls (10.1160,-8.1960) and (9.9720,-8.1960) ..
(9.9720,-7.9680) .. controls (9.9720,-7.8600) and (10.0680,-7.8480) ..
(10.1400,-7.8480) .. controls (10.3800,-7.8360) and (10.7640,-7.7640) ..
(10.7640,-7.3920) .. controls (10.7640,-7.2360) and (10.7160,-7.1520) ..
(10.5960,-6.9480) -- (7.3200,-1.2120) -- (6.8880,-7.4640) .. controls
(6.8880,-7.6080) and (7.0200,-7.8360) .. (7.6920,-7.8480) .. controls
(7.8480,-7.8480) and (7.9680,-7.8480) .. (7.9680,-8.0760) .. controls
(7.9680,-8.1960) and (7.8480,-8.1960) .. (7.7880,-8.1960) .. controls
(7.3680,-8.1960) and (6.9240,-8.1720) .. (6.4920,-8.1720) -- (5.8680,-8.1720)
.. controls (5.6880,-8.1720) and (5.4720,-8.1960) .. (5.2920,-8.1960) ..
controls (5.2200,-8.1960) and (5.0760,-8.1960) .. (5.0760,-7.9680) .. controls
(5.0760,-7.8480) and (5.1600,-7.8480) .. (5.3640,-7.8480) .. controls
(5.9160,-7.8480) and (5.9160,-7.8360) .. (5.9640,-7.1040) -- (6.0000,-6.6720)
-- (2.8920,-1.2120) -- (2.4480,-7.4040) .. controls (2.4480,-7.5360) and
(2.4480,-7.8360) .. (3.2640,-7.8480) .. controls (3.3960,-7.8480) and
(3.5280,-7.8480) .. (3.5280,-8.0640) .. controls (3.5280,-8.1960) and
(3.4200,-8.1960) .. (3.3480,-8.1960) .. controls (2.9280,-8.1960) and
(2.4840,-8.1720) .. (2.0520,-8.1720) -- (1.4280,-8.1720) .. controls
(1.2480,-8.1720) and (1.0320,-8.1960) .. (0.8520,-8.1960) .. controls
(0.7800,-8.1960) and (0.6360,-8.1960) .. (0.6360,-7.9680) .. controls
(0.6360,-7.8480) and (0.7320,-7.8480) .. (0.9000,-7.8480) .. controls
(1.4640,-7.8480) and (1.4760,-7.7760) .. (1.5000,-7.3920) -- (2.0280,-0.0240)
.. controls (2.0400,0.1800) and (2.0520,0.2520) .. (2.1960,0.2520) .. controls
(2.3160,0.2520) and (2.3400,0.2040) .. (2.4480,0.0240) -- (6.0240,-6.2280) --
(6.4680,-0.0240) .. controls (6.4800,0.1800) and (6.4920,0.2520) ..
(6.6360,0.2520) .. controls (6.7560,0.2520) and (6.7920,0.1920) ..
(6.8880,0.0240) -- (10.8360,-6.8640) -- cycle;
end{scope}
end{scope}
end{tikzpicture}
end{document}
The graphics looks fine, but the labels vanished somehow.
add a comment |
And Asymptote
version, ellipse.asy
along with a translation to tikz via svg
size(300);
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
real a=2.5, b=2, focus=sqrt(a*a-b*b);
pair c=(0,0), d=(-focus,0);
path el=ellipse(c,a,b);
path tline=rotate(36)*(c--(2a,0));
real tr=intersect(el,tline)[0];
pair r=point(el,tr);
pair tan_dir=dir(el,tr);
path tan_line=scale(b)*(-tan_dir--tan_dir);
pair w=intersectionpoint(d--r,shift(c)*tan_line);
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
draw(el,elPen); draw(d--r,linePen);
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
Dot(c,d,r,w);
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
run asy ellipse.asy
to get ellipse.eps
or asy -f pdf ellipse.asy
to get ellipse.pdf
.
Or put it inside the asy
environment in a LaTeX
document (see texdoc asymptote
).
Edit: Some comments added.
A user defined function to draw a list of dots, to be used later as Dot(c,d,r,w);
:
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
The function Dot
is defined with ... pair[] p
construction, that means
it is able to accept a variable number of arguments, all of them will be placed
in an array of pairs (2D coordinates) p[]
.
real a=2.5, b=2, focus=sqrt(a*a-b*b);
defines dimensions.
pair c=(0,0), d=(-focus,0);
defines points c
and d
by x,y
coordinates.
path el=ellipse(c,a,b);
defines a curve (ellipse outline) to be used later;
path tline=rotate(36)*(c--(2a,0));
defines a straight line as a rotated by 36 degrees horizontal line c--(2a,0)
real tr=intersect(el,tline)[0];
defines a so-called intersection time, a parameter t
for the path el
, which
corresponds to the point of intersection of tline
with the ellipse outline el
.
pair r=point(el,tr);
define the point of intersection itself.
pair tan_dir=dir(el,tr);
defines a tangent direction at the point r
(at time tr
).
path tan_line=scale(b)*(-tan_dir--tan_dir);
defines a line through the origin parallel to the tangent.
pair w=intersectionpoint(d--r,shift(c)*tan_line);
defines an intersection point of interest, between the line d--r
and a line parallel to the tangent through the origin (point c
).
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
defined are pens (color and width) to be used for lines and ellipse
draw(el,elPen); draw(d--r,linePen);
draw the ellipse and the line d--r
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
draw two parallel lines through points r
and c
, using defined function Dot
.
Dot(c,d,r,w);
draw fancy dots at all four points c,d,r,w
.
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
and finally, draw labels, formatted as a (La)TeX
string (e.g. "$C$"
)
at specified position (e.g. ,c
), oriented as specified (e.d. NE
means to the North-West of the point).
Edit2: tikz translation added
Thanks to Harish Kumar
for his answer [here][2], I've just installed inkscape2tikz
from [source][3] and after running asy -f svg ellipse.asy
svg2tikz ellipse.svg > ellipse.tex
here it is a LaTeX
document with tikz
solution, translated from the ellipse.asy
code shown above:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tikz}
begin{document}
definecolor{cff0000}{RGB}{255,0,0}
definecolor{c000040}{RGB}{0,0,64}
definecolor{cffffff}{RGB}{255,255,255}
begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
begin{scope}[cm={{0.996,0.0,0.0,0.996,(0.0,0.0)}}]
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=cff0000,line join=round,line cap=round,miter limit=10.04,line
width=1.200pt] (75.2812,0.0000) .. controls (75.2812,-33.2613) and
(41.5767,-60.2250) .. (0.0000,-60.2250) .. controls (-41.5767,-60.2250) and
(-75.2812,-33.2613) .. (-75.2812,-0.0000) .. controls (-75.2812,33.2613) and
(-41.5767,60.2250) .. (0.0000,60.2250) .. controls (41.5767,60.2250) and
(75.2812,33.2613) .. (75.2812,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (-45.1687,-0.0000) -- (55.7293,-40.4897);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (100.9330,-0.6942) -- (10.5257,-80.2853);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (45.2036,39.7955) -- (-45.2036,-39.7955);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (1.8068,0.0000) .. controls (1.8068,-0.9978) and
(0.9978,-1.8068) .. (0.0000,-1.8068) .. controls (-0.9978,-1.8068) and
(-1.8068,-0.9978) .. (-1.8068,-0.0000) .. controls (-1.8068,0.9978) and
(-0.9978,1.8068) .. (0.0000,1.8068) .. controls (0.9978,1.8068) and
(1.8068,0.9978) .. (1.8068,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (1.2045,0.0000) .. controls (1.2045,-0.6652) and
(0.6652,-1.2045) .. (0.0000,-1.2045) .. controls (-0.6652,-1.2045) and
(-1.2045,-0.6652) .. (-1.2045,-0.0000) .. controls (-1.2045,0.6652) and
(-0.6652,1.2045) .. (0.0000,1.2045) .. controls (0.6652,1.2045) and
(1.2045,0.6652) .. (1.2045,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-43.3620,-0.0000) .. controls (-43.3620,-0.9978) and
(-44.1709,-1.8068) .. (-45.1687,-1.8068) .. controls (-46.1666,-1.8068) and
(-46.9755,-0.9978) .. (-46.9755,-0.0000) .. controls (-46.9755,0.9978) and
(-46.1666,1.8068) .. (-45.1687,1.8068) .. controls (-44.1709,1.8068) and
(-43.3620,0.9978) .. (-43.3620,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-43.9642,-0.0000) .. controls (-43.9642,-0.6652) and
(-44.5035,-1.2045) .. (-45.1687,-1.2045) .. controls (-45.8340,-1.2045) and
(-46.3732,-0.6652) .. (-46.3732,-0.0000) .. controls (-46.3732,0.6652) and
(-45.8340,1.2045) .. (-45.1687,1.2045) .. controls (-44.5035,1.2045) and
(-43.9642,0.6652) .. (-43.9642,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (57.5361,-40.4897) .. controls (57.5361,-41.4876) and
(56.7272,-42.2965) .. (55.7293,-42.2965) .. controls (54.7315,-42.2965) and
(53.9226,-41.4876) .. (53.9226,-40.4897) .. controls (53.9226,-39.4919) and
(54.7315,-38.6830) .. (55.7293,-38.6830) .. controls (56.7272,-38.6830) and
(57.5361,-39.4919) .. (57.5361,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (56.9338,-40.4897) .. controls (56.9338,-41.1550) and
(56.3946,-41.6942) .. (55.7293,-41.6942) .. controls (55.0641,-41.6942) and
(54.5248,-41.1550) .. (54.5248,-40.4897) .. controls (54.5248,-39.8245) and
(55.0641,-39.2852) .. (55.7293,-39.2852) .. controls (56.3946,-39.2852) and
(56.9338,-39.8245) .. (56.9338,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-12.3358,-12.4506) .. controls (-12.3358,-13.4484) and
(-13.1447,-14.2573) .. (-14.1426,-14.2573) .. controls (-15.1404,-14.2573) and
(-15.9493,-13.4484) .. (-15.9493,-12.4506) .. controls (-15.9493,-11.4528) and
(-15.1404,-10.6438) .. (-14.1426,-10.6438) .. controls (-13.1447,-10.6438) and
(-12.3358,-11.4528) .. (-12.3358,-12.4506) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-12.9381,-12.4506) .. controls (-12.9381,-13.1158) and
(-13.4774,-13.6551) .. (-14.1426,-13.6551) .. controls (-14.8078,-13.6551) and
(-15.3471,-13.1158) .. (-15.3471,-12.4506) .. controls (-15.3471,-11.7854) and
(-14.8078,-11.2461) .. (-14.1426,-11.2461) .. controls (-13.4774,-11.2461) and
(-12.9381,-11.7854) .. (-12.9381,-12.4506) -- cycle;
end{scope}
begin{scope}[shift={(209.733,171.904)}]
path (8.9640,-8.3400) .. controls (8.9640,-8.4480) and (8.8800,-8.4480) ..
(8.8560,-8.4480) .. controls (8.8320,-8.4480) and (8.7840,-8.4480) ..
(8.6880,-8.3280) -- (7.8600,-7.3200) .. controls (7.4400,-8.0400) and
(6.7800,-8.4480) .. (5.8800,-8.4480) .. controls (3.2880,-8.4480) and
(0.6000,-5.8200) .. (0.6000,-3.0000) .. controls (0.6000,-0.9960) and
(2.0040,0.2520) .. (3.7560,0.2520) .. controls (4.7160,0.2520) and
(5.5560,-0.1560) .. (6.2520,-0.7440) .. controls (7.2960,-1.6200) and
(7.6080,-2.7840) .. (7.6080,-2.8800) .. controls (7.6080,-2.9880) and
(7.5120,-2.9880) .. (7.4760,-2.9880) .. controls (7.3680,-2.9880) and
(7.3560,-2.9160) .. (7.3320,-2.8680) .. controls (6.7800,-0.9960) and
(5.1600,-0.0960) .. (3.9600,-0.0960) .. controls (2.6880,-0.0960) and
(1.5840,-0.9120) .. (1.5840,-2.6160) .. controls (1.5840,-3.0000) and
(1.7040,-5.0880) .. (3.0600,-6.6600) .. controls (3.7200,-7.4280) and
(4.8480,-8.1000) .. (5.9880,-8.1000) .. controls (7.3080,-8.1000) and
(7.8960,-7.0080) .. (7.8960,-5.7840) .. controls (7.8960,-5.4720) and
(7.8600,-5.2080) .. (7.8600,-5.1600) .. controls (7.8600,-5.0520) and
(7.9800,-5.0520) .. (8.0160,-5.0520) .. controls (8.1480,-5.0520) and
(8.1600,-5.0640) .. (8.2080,-5.2800) -- (8.9640,-8.3400) -- cycle;
end{scope}
begin{scope}[shift={(149.391,171.904)}]
path (1.8840,-0.8880) .. controls (1.7760,-0.4680) and (1.7520,-0.3480) ..
(0.9120,-0.3480) .. controls (0.6840,-0.3480) and (0.5640,-0.3480) ..
(0.5640,-0.1320) .. controls (0.5640,0.0000) and (0.6360,0.0000) ..
(0.8760,0.0000) -- (4.6800,0.0000) .. controls (7.1040,0.0000) and
(9.4680,-2.5080) .. (9.4680,-5.1840) .. controls (9.4680,-6.9120) and
(8.4360,-8.1960) .. (6.7200,-8.1960) -- (2.8680,-8.1960) .. controls
(2.6400,-8.1960) and (2.5320,-8.1960) .. (2.5320,-7.9680) .. controls
(2.5320,-7.8480) and (2.6400,-7.8480) .. (2.8200,-7.8480) .. controls
(3.5520,-7.8480) and (3.5520,-7.7520) .. (3.5520,-7.6200) .. controls
(3.5520,-7.5960) and (3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880)
-- cycle(4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (6.3600,-7.8480) .. controls (7.4880,-7.8480) and
(8.5200,-7.2360) .. (8.5200,-5.5800) .. controls (8.5200,-4.9800) and
(8.2800,-2.8920) .. (7.1160,-1.5720) .. controls (6.7800,-1.1760) and
(5.8680,-0.3480) .. (4.4880,-0.3480) -- (3.1200,-0.3480) .. controls
(2.9520,-0.3480) and (2.9280,-0.3480) .. (2.8560,-0.3600) .. controls
(2.7240,-0.3720) and (2.7120,-0.3960) .. (2.7120,-0.4920) .. controls
(2.7120,-0.5760) and (2.7360,-0.6480) .. (2.7600,-0.7560) -- (4.4160,-7.3800)
-- cycle;
end{scope}
begin{scope}[shift={(265.462,131.415)}]
path (4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (5.9040,-7.8480) .. controls (6.9360,-7.8480) and
(7.7040,-7.5360) .. (7.7040,-6.6000) .. controls (7.7040,-5.9880) and
(7.3920,-4.2240) .. (4.9800,-4.2240) -- (3.6240,-4.2240) -- (4.4160,-7.3800)
-- cycle(6.0840,-4.0800) .. controls (7.5720,-4.4040) and (8.7360,-5.3640) ..
(8.7360,-6.3960) .. controls (8.7360,-7.3320) and (7.7880,-8.1960) ..
(6.1200,-8.1960) -- (2.8680,-8.1960) .. controls (2.6280,-8.1960) and
(2.5200,-8.1960) .. (2.5200,-7.9680) .. controls (2.5200,-7.8480) and
(2.6040,-7.8480) .. (2.8320,-7.8480) .. controls (3.5520,-7.8480) and
(3.5520,-7.7520) .. (3.5520,-7.6200) .. controls (3.5520,-7.5960) and
(3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880) .. controls
(1.7760,-0.4680) and (1.7520,-0.3480) .. (0.9240,-0.3480) .. controls
(0.6480,-0.3480) and (0.5640,-0.3480) .. (0.5640,-0.1200) .. controls
(0.5640,0.0000) and (0.6960,0.0000) .. (0.7320,0.0000) .. controls
(0.9480,0.0000) and (1.2000,-0.0240) .. (1.4280,-0.0240) -- (2.8440,-0.0240)
.. controls (3.0600,-0.0240) and (3.3120,0.0000) .. (3.5280,0.0000) ..
controls (3.6240,0.0000) and (3.7560,0.0000) .. (3.7560,-0.2280) .. controls
(3.7560,-0.3480) and (3.6480,-0.3480) .. (3.4680,-0.3480) .. controls
(2.7360,-0.3480) and (2.7360,-0.4440) .. (2.7360,-0.5640) .. controls
(2.7360,-0.5760) and (2.7360,-0.6600) .. (2.7600,-0.7560) -- (3.5640,-3.9840)
-- (5.0040,-3.9840) .. controls (6.1440,-3.9840) and (6.3600,-3.2640) ..
(6.3600,-2.8680) .. controls (6.3600,-2.6880) and (6.2400,-2.2200) ..
(6.1560,-1.9080) .. controls (6.0240,-1.3560) and (5.9880,-1.2240) ..
(5.9880,-0.9960) .. controls (5.9880,-0.1440) and (6.6840,0.2520) ..
(7.4880,0.2520) .. controls (8.4600,0.2520) and (8.8800,-0.9360) ..
(8.8800,-1.1040) .. controls (8.8800,-1.1880) and (8.8200,-1.2240) ..
(8.7480,-1.2240) .. controls (8.6520,-1.2240) and (8.6280,-1.1520) ..
(8.6040,-1.0560) .. controls (8.3160,-0.2040) and (7.8240,0.0120) ..
(7.5240,0.0120) .. controls (7.2240,0.0120) and (7.0320,-0.1200) ..
(7.0320,-0.6600) .. controls (7.0320,-0.9480) and (7.1760,-2.0400) ..
(7.1880,-2.1000) .. controls (7.2480,-2.5440) and (7.2480,-2.5920) ..
(7.2480,-2.6880) .. controls (7.2480,-3.5640) and (6.5400,-3.9360) ..
(6.0840,-4.0800) -- cycle;
end{scope}
begin{scope}[shift={(186.682,173.799)}]
path (10.8360,-6.8640) .. controls (11.1120,-7.3320) and (11.3760,-7.7760) ..
(12.0960,-7.8480) .. controls (12.2040,-7.8600) and (12.3120,-7.8720) ..
(12.3120,-8.0640) .. controls (12.3120,-8.1960) and (12.2040,-8.1960) ..
(12.1680,-8.1960) .. controls (12.1440,-8.1960) and (12.0600,-8.1720) ..
(11.2680,-8.1720) .. controls (10.9080,-8.1720) and (10.5360,-8.1960) ..
(10.1880,-8.1960) .. controls (10.1160,-8.1960) and (9.9720,-8.1960) ..
(9.9720,-7.9680) .. controls (9.9720,-7.8600) and (10.0680,-7.8480) ..
(10.1400,-7.8480) .. controls (10.3800,-7.8360) and (10.7640,-7.7640) ..
(10.7640,-7.3920) .. controls (10.7640,-7.2360) and (10.7160,-7.1520) ..
(10.5960,-6.9480) -- (7.3200,-1.2120) -- (6.8880,-7.4640) .. controls
(6.8880,-7.6080) and (7.0200,-7.8360) .. (7.6920,-7.8480) .. controls
(7.8480,-7.8480) and (7.9680,-7.8480) .. (7.9680,-8.0760) .. controls
(7.9680,-8.1960) and (7.8480,-8.1960) .. (7.7880,-8.1960) .. controls
(7.3680,-8.1960) and (6.9240,-8.1720) .. (6.4920,-8.1720) -- (5.8680,-8.1720)
.. controls (5.6880,-8.1720) and (5.4720,-8.1960) .. (5.2920,-8.1960) ..
controls (5.2200,-8.1960) and (5.0760,-8.1960) .. (5.0760,-7.9680) .. controls
(5.0760,-7.8480) and (5.1600,-7.8480) .. (5.3640,-7.8480) .. controls
(5.9160,-7.8480) and (5.9160,-7.8360) .. (5.9640,-7.1040) -- (6.0000,-6.6720)
-- (2.8920,-1.2120) -- (2.4480,-7.4040) .. controls (2.4480,-7.5360) and
(2.4480,-7.8360) .. (3.2640,-7.8480) .. controls (3.3960,-7.8480) and
(3.5280,-7.8480) .. (3.5280,-8.0640) .. controls (3.5280,-8.1960) and
(3.4200,-8.1960) .. (3.3480,-8.1960) .. controls (2.9280,-8.1960) and
(2.4840,-8.1720) .. (2.0520,-8.1720) -- (1.4280,-8.1720) .. controls
(1.2480,-8.1720) and (1.0320,-8.1960) .. (0.8520,-8.1960) .. controls
(0.7800,-8.1960) and (0.6360,-8.1960) .. (0.6360,-7.9680) .. controls
(0.6360,-7.8480) and (0.7320,-7.8480) .. (0.9000,-7.8480) .. controls
(1.4640,-7.8480) and (1.4760,-7.7760) .. (1.5000,-7.3920) -- (2.0280,-0.0240)
.. controls (2.0400,0.1800) and (2.0520,0.2520) .. (2.1960,0.2520) .. controls
(2.3160,0.2520) and (2.3400,0.2040) .. (2.4480,0.0240) -- (6.0240,-6.2280) --
(6.4680,-0.0240) .. controls (6.4800,0.1800) and (6.4920,0.2520) ..
(6.6360,0.2520) .. controls (6.7560,0.2520) and (6.7920,0.1920) ..
(6.8880,0.0240) -- (10.8360,-6.8640) -- cycle;
end{scope}
end{scope}
end{tikzpicture}
end{document}
The graphics looks fine, but the labels vanished somehow.
add a comment |
And Asymptote
version, ellipse.asy
along with a translation to tikz via svg
size(300);
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
real a=2.5, b=2, focus=sqrt(a*a-b*b);
pair c=(0,0), d=(-focus,0);
path el=ellipse(c,a,b);
path tline=rotate(36)*(c--(2a,0));
real tr=intersect(el,tline)[0];
pair r=point(el,tr);
pair tan_dir=dir(el,tr);
path tan_line=scale(b)*(-tan_dir--tan_dir);
pair w=intersectionpoint(d--r,shift(c)*tan_line);
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
draw(el,elPen); draw(d--r,linePen);
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
Dot(c,d,r,w);
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
run asy ellipse.asy
to get ellipse.eps
or asy -f pdf ellipse.asy
to get ellipse.pdf
.
Or put it inside the asy
environment in a LaTeX
document (see texdoc asymptote
).
Edit: Some comments added.
A user defined function to draw a list of dots, to be used later as Dot(c,d,r,w);
:
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
The function Dot
is defined with ... pair[] p
construction, that means
it is able to accept a variable number of arguments, all of them will be placed
in an array of pairs (2D coordinates) p[]
.
real a=2.5, b=2, focus=sqrt(a*a-b*b);
defines dimensions.
pair c=(0,0), d=(-focus,0);
defines points c
and d
by x,y
coordinates.
path el=ellipse(c,a,b);
defines a curve (ellipse outline) to be used later;
path tline=rotate(36)*(c--(2a,0));
defines a straight line as a rotated by 36 degrees horizontal line c--(2a,0)
real tr=intersect(el,tline)[0];
defines a so-called intersection time, a parameter t
for the path el
, which
corresponds to the point of intersection of tline
with the ellipse outline el
.
pair r=point(el,tr);
define the point of intersection itself.
pair tan_dir=dir(el,tr);
defines a tangent direction at the point r
(at time tr
).
path tan_line=scale(b)*(-tan_dir--tan_dir);
defines a line through the origin parallel to the tangent.
pair w=intersectionpoint(d--r,shift(c)*tan_line);
defines an intersection point of interest, between the line d--r
and a line parallel to the tangent through the origin (point c
).
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
defined are pens (color and width) to be used for lines and ellipse
draw(el,elPen); draw(d--r,linePen);
draw the ellipse and the line d--r
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
draw two parallel lines through points r
and c
, using defined function Dot
.
Dot(c,d,r,w);
draw fancy dots at all four points c,d,r,w
.
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
and finally, draw labels, formatted as a (La)TeX
string (e.g. "$C$"
)
at specified position (e.g. ,c
), oriented as specified (e.d. NE
means to the North-West of the point).
Edit2: tikz translation added
Thanks to Harish Kumar
for his answer [here][2], I've just installed inkscape2tikz
from [source][3] and after running asy -f svg ellipse.asy
svg2tikz ellipse.svg > ellipse.tex
here it is a LaTeX
document with tikz
solution, translated from the ellipse.asy
code shown above:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tikz}
begin{document}
definecolor{cff0000}{RGB}{255,0,0}
definecolor{c000040}{RGB}{0,0,64}
definecolor{cffffff}{RGB}{255,255,255}
begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
begin{scope}[cm={{0.996,0.0,0.0,0.996,(0.0,0.0)}}]
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=cff0000,line join=round,line cap=round,miter limit=10.04,line
width=1.200pt] (75.2812,0.0000) .. controls (75.2812,-33.2613) and
(41.5767,-60.2250) .. (0.0000,-60.2250) .. controls (-41.5767,-60.2250) and
(-75.2812,-33.2613) .. (-75.2812,-0.0000) .. controls (-75.2812,33.2613) and
(-41.5767,60.2250) .. (0.0000,60.2250) .. controls (41.5767,60.2250) and
(75.2812,33.2613) .. (75.2812,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (-45.1687,-0.0000) -- (55.7293,-40.4897);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (100.9330,-0.6942) -- (10.5257,-80.2853);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (45.2036,39.7955) -- (-45.2036,-39.7955);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (1.8068,0.0000) .. controls (1.8068,-0.9978) and
(0.9978,-1.8068) .. (0.0000,-1.8068) .. controls (-0.9978,-1.8068) and
(-1.8068,-0.9978) .. (-1.8068,-0.0000) .. controls (-1.8068,0.9978) and
(-0.9978,1.8068) .. (0.0000,1.8068) .. controls (0.9978,1.8068) and
(1.8068,0.9978) .. (1.8068,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (1.2045,0.0000) .. controls (1.2045,-0.6652) and
(0.6652,-1.2045) .. (0.0000,-1.2045) .. controls (-0.6652,-1.2045) and
(-1.2045,-0.6652) .. (-1.2045,-0.0000) .. controls (-1.2045,0.6652) and
(-0.6652,1.2045) .. (0.0000,1.2045) .. controls (0.6652,1.2045) and
(1.2045,0.6652) .. (1.2045,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-43.3620,-0.0000) .. controls (-43.3620,-0.9978) and
(-44.1709,-1.8068) .. (-45.1687,-1.8068) .. controls (-46.1666,-1.8068) and
(-46.9755,-0.9978) .. (-46.9755,-0.0000) .. controls (-46.9755,0.9978) and
(-46.1666,1.8068) .. (-45.1687,1.8068) .. controls (-44.1709,1.8068) and
(-43.3620,0.9978) .. (-43.3620,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-43.9642,-0.0000) .. controls (-43.9642,-0.6652) and
(-44.5035,-1.2045) .. (-45.1687,-1.2045) .. controls (-45.8340,-1.2045) and
(-46.3732,-0.6652) .. (-46.3732,-0.0000) .. controls (-46.3732,0.6652) and
(-45.8340,1.2045) .. (-45.1687,1.2045) .. controls (-44.5035,1.2045) and
(-43.9642,0.6652) .. (-43.9642,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (57.5361,-40.4897) .. controls (57.5361,-41.4876) and
(56.7272,-42.2965) .. (55.7293,-42.2965) .. controls (54.7315,-42.2965) and
(53.9226,-41.4876) .. (53.9226,-40.4897) .. controls (53.9226,-39.4919) and
(54.7315,-38.6830) .. (55.7293,-38.6830) .. controls (56.7272,-38.6830) and
(57.5361,-39.4919) .. (57.5361,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (56.9338,-40.4897) .. controls (56.9338,-41.1550) and
(56.3946,-41.6942) .. (55.7293,-41.6942) .. controls (55.0641,-41.6942) and
(54.5248,-41.1550) .. (54.5248,-40.4897) .. controls (54.5248,-39.8245) and
(55.0641,-39.2852) .. (55.7293,-39.2852) .. controls (56.3946,-39.2852) and
(56.9338,-39.8245) .. (56.9338,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-12.3358,-12.4506) .. controls (-12.3358,-13.4484) and
(-13.1447,-14.2573) .. (-14.1426,-14.2573) .. controls (-15.1404,-14.2573) and
(-15.9493,-13.4484) .. (-15.9493,-12.4506) .. controls (-15.9493,-11.4528) and
(-15.1404,-10.6438) .. (-14.1426,-10.6438) .. controls (-13.1447,-10.6438) and
(-12.3358,-11.4528) .. (-12.3358,-12.4506) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-12.9381,-12.4506) .. controls (-12.9381,-13.1158) and
(-13.4774,-13.6551) .. (-14.1426,-13.6551) .. controls (-14.8078,-13.6551) and
(-15.3471,-13.1158) .. (-15.3471,-12.4506) .. controls (-15.3471,-11.7854) and
(-14.8078,-11.2461) .. (-14.1426,-11.2461) .. controls (-13.4774,-11.2461) and
(-12.9381,-11.7854) .. (-12.9381,-12.4506) -- cycle;
end{scope}
begin{scope}[shift={(209.733,171.904)}]
path (8.9640,-8.3400) .. controls (8.9640,-8.4480) and (8.8800,-8.4480) ..
(8.8560,-8.4480) .. controls (8.8320,-8.4480) and (8.7840,-8.4480) ..
(8.6880,-8.3280) -- (7.8600,-7.3200) .. controls (7.4400,-8.0400) and
(6.7800,-8.4480) .. (5.8800,-8.4480) .. controls (3.2880,-8.4480) and
(0.6000,-5.8200) .. (0.6000,-3.0000) .. controls (0.6000,-0.9960) and
(2.0040,0.2520) .. (3.7560,0.2520) .. controls (4.7160,0.2520) and
(5.5560,-0.1560) .. (6.2520,-0.7440) .. controls (7.2960,-1.6200) and
(7.6080,-2.7840) .. (7.6080,-2.8800) .. controls (7.6080,-2.9880) and
(7.5120,-2.9880) .. (7.4760,-2.9880) .. controls (7.3680,-2.9880) and
(7.3560,-2.9160) .. (7.3320,-2.8680) .. controls (6.7800,-0.9960) and
(5.1600,-0.0960) .. (3.9600,-0.0960) .. controls (2.6880,-0.0960) and
(1.5840,-0.9120) .. (1.5840,-2.6160) .. controls (1.5840,-3.0000) and
(1.7040,-5.0880) .. (3.0600,-6.6600) .. controls (3.7200,-7.4280) and
(4.8480,-8.1000) .. (5.9880,-8.1000) .. controls (7.3080,-8.1000) and
(7.8960,-7.0080) .. (7.8960,-5.7840) .. controls (7.8960,-5.4720) and
(7.8600,-5.2080) .. (7.8600,-5.1600) .. controls (7.8600,-5.0520) and
(7.9800,-5.0520) .. (8.0160,-5.0520) .. controls (8.1480,-5.0520) and
(8.1600,-5.0640) .. (8.2080,-5.2800) -- (8.9640,-8.3400) -- cycle;
end{scope}
begin{scope}[shift={(149.391,171.904)}]
path (1.8840,-0.8880) .. controls (1.7760,-0.4680) and (1.7520,-0.3480) ..
(0.9120,-0.3480) .. controls (0.6840,-0.3480) and (0.5640,-0.3480) ..
(0.5640,-0.1320) .. controls (0.5640,0.0000) and (0.6360,0.0000) ..
(0.8760,0.0000) -- (4.6800,0.0000) .. controls (7.1040,0.0000) and
(9.4680,-2.5080) .. (9.4680,-5.1840) .. controls (9.4680,-6.9120) and
(8.4360,-8.1960) .. (6.7200,-8.1960) -- (2.8680,-8.1960) .. controls
(2.6400,-8.1960) and (2.5320,-8.1960) .. (2.5320,-7.9680) .. controls
(2.5320,-7.8480) and (2.6400,-7.8480) .. (2.8200,-7.8480) .. controls
(3.5520,-7.8480) and (3.5520,-7.7520) .. (3.5520,-7.6200) .. controls
(3.5520,-7.5960) and (3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880)
-- cycle(4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (6.3600,-7.8480) .. controls (7.4880,-7.8480) and
(8.5200,-7.2360) .. (8.5200,-5.5800) .. controls (8.5200,-4.9800) and
(8.2800,-2.8920) .. (7.1160,-1.5720) .. controls (6.7800,-1.1760) and
(5.8680,-0.3480) .. (4.4880,-0.3480) -- (3.1200,-0.3480) .. controls
(2.9520,-0.3480) and (2.9280,-0.3480) .. (2.8560,-0.3600) .. controls
(2.7240,-0.3720) and (2.7120,-0.3960) .. (2.7120,-0.4920) .. controls
(2.7120,-0.5760) and (2.7360,-0.6480) .. (2.7600,-0.7560) -- (4.4160,-7.3800)
-- cycle;
end{scope}
begin{scope}[shift={(265.462,131.415)}]
path (4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (5.9040,-7.8480) .. controls (6.9360,-7.8480) and
(7.7040,-7.5360) .. (7.7040,-6.6000) .. controls (7.7040,-5.9880) and
(7.3920,-4.2240) .. (4.9800,-4.2240) -- (3.6240,-4.2240) -- (4.4160,-7.3800)
-- cycle(6.0840,-4.0800) .. controls (7.5720,-4.4040) and (8.7360,-5.3640) ..
(8.7360,-6.3960) .. controls (8.7360,-7.3320) and (7.7880,-8.1960) ..
(6.1200,-8.1960) -- (2.8680,-8.1960) .. controls (2.6280,-8.1960) and
(2.5200,-8.1960) .. (2.5200,-7.9680) .. controls (2.5200,-7.8480) and
(2.6040,-7.8480) .. (2.8320,-7.8480) .. controls (3.5520,-7.8480) and
(3.5520,-7.7520) .. (3.5520,-7.6200) .. controls (3.5520,-7.5960) and
(3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880) .. controls
(1.7760,-0.4680) and (1.7520,-0.3480) .. (0.9240,-0.3480) .. controls
(0.6480,-0.3480) and (0.5640,-0.3480) .. (0.5640,-0.1200) .. controls
(0.5640,0.0000) and (0.6960,0.0000) .. (0.7320,0.0000) .. controls
(0.9480,0.0000) and (1.2000,-0.0240) .. (1.4280,-0.0240) -- (2.8440,-0.0240)
.. controls (3.0600,-0.0240) and (3.3120,0.0000) .. (3.5280,0.0000) ..
controls (3.6240,0.0000) and (3.7560,0.0000) .. (3.7560,-0.2280) .. controls
(3.7560,-0.3480) and (3.6480,-0.3480) .. (3.4680,-0.3480) .. controls
(2.7360,-0.3480) and (2.7360,-0.4440) .. (2.7360,-0.5640) .. controls
(2.7360,-0.5760) and (2.7360,-0.6600) .. (2.7600,-0.7560) -- (3.5640,-3.9840)
-- (5.0040,-3.9840) .. controls (6.1440,-3.9840) and (6.3600,-3.2640) ..
(6.3600,-2.8680) .. controls (6.3600,-2.6880) and (6.2400,-2.2200) ..
(6.1560,-1.9080) .. controls (6.0240,-1.3560) and (5.9880,-1.2240) ..
(5.9880,-0.9960) .. controls (5.9880,-0.1440) and (6.6840,0.2520) ..
(7.4880,0.2520) .. controls (8.4600,0.2520) and (8.8800,-0.9360) ..
(8.8800,-1.1040) .. controls (8.8800,-1.1880) and (8.8200,-1.2240) ..
(8.7480,-1.2240) .. controls (8.6520,-1.2240) and (8.6280,-1.1520) ..
(8.6040,-1.0560) .. controls (8.3160,-0.2040) and (7.8240,0.0120) ..
(7.5240,0.0120) .. controls (7.2240,0.0120) and (7.0320,-0.1200) ..
(7.0320,-0.6600) .. controls (7.0320,-0.9480) and (7.1760,-2.0400) ..
(7.1880,-2.1000) .. controls (7.2480,-2.5440) and (7.2480,-2.5920) ..
(7.2480,-2.6880) .. controls (7.2480,-3.5640) and (6.5400,-3.9360) ..
(6.0840,-4.0800) -- cycle;
end{scope}
begin{scope}[shift={(186.682,173.799)}]
path (10.8360,-6.8640) .. controls (11.1120,-7.3320) and (11.3760,-7.7760) ..
(12.0960,-7.8480) .. controls (12.2040,-7.8600) and (12.3120,-7.8720) ..
(12.3120,-8.0640) .. controls (12.3120,-8.1960) and (12.2040,-8.1960) ..
(12.1680,-8.1960) .. controls (12.1440,-8.1960) and (12.0600,-8.1720) ..
(11.2680,-8.1720) .. controls (10.9080,-8.1720) and (10.5360,-8.1960) ..
(10.1880,-8.1960) .. controls (10.1160,-8.1960) and (9.9720,-8.1960) ..
(9.9720,-7.9680) .. controls (9.9720,-7.8600) and (10.0680,-7.8480) ..
(10.1400,-7.8480) .. controls (10.3800,-7.8360) and (10.7640,-7.7640) ..
(10.7640,-7.3920) .. controls (10.7640,-7.2360) and (10.7160,-7.1520) ..
(10.5960,-6.9480) -- (7.3200,-1.2120) -- (6.8880,-7.4640) .. controls
(6.8880,-7.6080) and (7.0200,-7.8360) .. (7.6920,-7.8480) .. controls
(7.8480,-7.8480) and (7.9680,-7.8480) .. (7.9680,-8.0760) .. controls
(7.9680,-8.1960) and (7.8480,-8.1960) .. (7.7880,-8.1960) .. controls
(7.3680,-8.1960) and (6.9240,-8.1720) .. (6.4920,-8.1720) -- (5.8680,-8.1720)
.. controls (5.6880,-8.1720) and (5.4720,-8.1960) .. (5.2920,-8.1960) ..
controls (5.2200,-8.1960) and (5.0760,-8.1960) .. (5.0760,-7.9680) .. controls
(5.0760,-7.8480) and (5.1600,-7.8480) .. (5.3640,-7.8480) .. controls
(5.9160,-7.8480) and (5.9160,-7.8360) .. (5.9640,-7.1040) -- (6.0000,-6.6720)
-- (2.8920,-1.2120) -- (2.4480,-7.4040) .. controls (2.4480,-7.5360) and
(2.4480,-7.8360) .. (3.2640,-7.8480) .. controls (3.3960,-7.8480) and
(3.5280,-7.8480) .. (3.5280,-8.0640) .. controls (3.5280,-8.1960) and
(3.4200,-8.1960) .. (3.3480,-8.1960) .. controls (2.9280,-8.1960) and
(2.4840,-8.1720) .. (2.0520,-8.1720) -- (1.4280,-8.1720) .. controls
(1.2480,-8.1720) and (1.0320,-8.1960) .. (0.8520,-8.1960) .. controls
(0.7800,-8.1960) and (0.6360,-8.1960) .. (0.6360,-7.9680) .. controls
(0.6360,-7.8480) and (0.7320,-7.8480) .. (0.9000,-7.8480) .. controls
(1.4640,-7.8480) and (1.4760,-7.7760) .. (1.5000,-7.3920) -- (2.0280,-0.0240)
.. controls (2.0400,0.1800) and (2.0520,0.2520) .. (2.1960,0.2520) .. controls
(2.3160,0.2520) and (2.3400,0.2040) .. (2.4480,0.0240) -- (6.0240,-6.2280) --
(6.4680,-0.0240) .. controls (6.4800,0.1800) and (6.4920,0.2520) ..
(6.6360,0.2520) .. controls (6.7560,0.2520) and (6.7920,0.1920) ..
(6.8880,0.0240) -- (10.8360,-6.8640) -- cycle;
end{scope}
end{scope}
end{tikzpicture}
end{document}
The graphics looks fine, but the labels vanished somehow.
And Asymptote
version, ellipse.asy
along with a translation to tikz via svg
size(300);
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
real a=2.5, b=2, focus=sqrt(a*a-b*b);
pair c=(0,0), d=(-focus,0);
path el=ellipse(c,a,b);
path tline=rotate(36)*(c--(2a,0));
real tr=intersect(el,tline)[0];
pair r=point(el,tr);
pair tan_dir=dir(el,tr);
path tan_line=scale(b)*(-tan_dir--tan_dir);
pair w=intersectionpoint(d--r,shift(c)*tan_line);
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
draw(el,elPen); draw(d--r,linePen);
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
Dot(c,d,r,w);
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
run asy ellipse.asy
to get ellipse.eps
or asy -f pdf ellipse.asy
to get ellipse.pdf
.
Or put it inside the asy
environment in a LaTeX
document (see texdoc asymptote
).
Edit: Some comments added.
A user defined function to draw a list of dots, to be used later as Dot(c,d,r,w);
:
void Dot(... pair[] p){ // function takes a variable number of arguments
for(int i=0;i<p.length;++i){
fill(shift(p[i])*scale(0.06)*unitcircle,black);
fill(shift(p[i])*scale(0.04)*unitcircle,white);
}
}
The function Dot
is defined with ... pair[] p
construction, that means
it is able to accept a variable number of arguments, all of them will be placed
in an array of pairs (2D coordinates) p[]
.
real a=2.5, b=2, focus=sqrt(a*a-b*b);
defines dimensions.
pair c=(0,0), d=(-focus,0);
defines points c
and d
by x,y
coordinates.
path el=ellipse(c,a,b);
defines a curve (ellipse outline) to be used later;
path tline=rotate(36)*(c--(2a,0));
defines a straight line as a rotated by 36 degrees horizontal line c--(2a,0)
real tr=intersect(el,tline)[0];
defines a so-called intersection time, a parameter t
for the path el
, which
corresponds to the point of intersection of tline
with the ellipse outline el
.
pair r=point(el,tr);
define the point of intersection itself.
pair tan_dir=dir(el,tr);
defines a tangent direction at the point r
(at time tr
).
path tan_line=scale(b)*(-tan_dir--tan_dir);
defines a line through the origin parallel to the tangent.
pair w=intersectionpoint(d--r,shift(c)*tan_line);
defines an intersection point of interest, between the line d--r
and a line parallel to the tangent through the origin (point c
).
pen linePen=darkblue+1.2pt;
pen elPen=red+1.5pt;
defined are pens (color and width) to be used for lines and ellipse
draw(el,elPen); draw(d--r,linePen);
draw the ellipse and the line d--r
draw(shift(r)*tan_line,linePen);
draw(shift(c)*tan_line,linePen);
draw two parallel lines through points r
and c
, using defined function Dot
.
Dot(c,d,r,w);
draw fancy dots at all four points c,d,r,w
.
label("$C$",c,NE);label("$D$",d,NW);
label("$R$",r,NE);label("$W$",w,S);
and finally, draw labels, formatted as a (La)TeX
string (e.g. "$C$"
)
at specified position (e.g. ,c
), oriented as specified (e.d. NE
means to the North-West of the point).
Edit2: tikz translation added
Thanks to Harish Kumar
for his answer [here][2], I've just installed inkscape2tikz
from [source][3] and after running asy -f svg ellipse.asy
svg2tikz ellipse.svg > ellipse.tex
here it is a LaTeX
document with tikz
solution, translated from the ellipse.asy
code shown above:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage{tikz}
begin{document}
definecolor{cff0000}{RGB}{255,0,0}
definecolor{c000040}{RGB}{0,0,64}
definecolor{cffffff}{RGB}{255,255,255}
begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
begin{scope}[cm={{0.996,0.0,0.0,0.996,(0.0,0.0)}}]
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=cff0000,line join=round,line cap=round,miter limit=10.04,line
width=1.200pt] (75.2812,0.0000) .. controls (75.2812,-33.2613) and
(41.5767,-60.2250) .. (0.0000,-60.2250) .. controls (-41.5767,-60.2250) and
(-75.2812,-33.2613) .. (-75.2812,-0.0000) .. controls (-75.2812,33.2613) and
(-41.5767,60.2250) .. (0.0000,60.2250) .. controls (41.5767,60.2250) and
(75.2812,33.2613) .. (75.2812,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (-45.1687,-0.0000) -- (55.7293,-40.4897);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (100.9330,-0.6942) -- (10.5257,-80.2853);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[draw=c000040,line join=round,line cap=round,miter limit=10.04,line
width=0.960pt] (45.2036,39.7955) -- (-45.2036,-39.7955);
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (1.8068,0.0000) .. controls (1.8068,-0.9978) and
(0.9978,-1.8068) .. (0.0000,-1.8068) .. controls (-0.9978,-1.8068) and
(-1.8068,-0.9978) .. (-1.8068,-0.0000) .. controls (-1.8068,0.9978) and
(-0.9978,1.8068) .. (0.0000,1.8068) .. controls (0.9978,1.8068) and
(1.8068,0.9978) .. (1.8068,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (1.2045,0.0000) .. controls (1.2045,-0.6652) and
(0.6652,-1.2045) .. (0.0000,-1.2045) .. controls (-0.6652,-1.2045) and
(-1.2045,-0.6652) .. (-1.2045,-0.0000) .. controls (-1.2045,0.6652) and
(-0.6652,1.2045) .. (0.0000,1.2045) .. controls (0.6652,1.2045) and
(1.2045,0.6652) .. (1.2045,0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-43.3620,-0.0000) .. controls (-43.3620,-0.9978) and
(-44.1709,-1.8068) .. (-45.1687,-1.8068) .. controls (-46.1666,-1.8068) and
(-46.9755,-0.9978) .. (-46.9755,-0.0000) .. controls (-46.9755,0.9978) and
(-46.1666,1.8068) .. (-45.1687,1.8068) .. controls (-44.1709,1.8068) and
(-43.3620,0.9978) .. (-43.3620,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-43.9642,-0.0000) .. controls (-43.9642,-0.6652) and
(-44.5035,-1.2045) .. (-45.1687,-1.2045) .. controls (-45.8340,-1.2045) and
(-46.3732,-0.6652) .. (-46.3732,-0.0000) .. controls (-46.3732,0.6652) and
(-45.8340,1.2045) .. (-45.1687,1.2045) .. controls (-44.5035,1.2045) and
(-43.9642,0.6652) .. (-43.9642,-0.0000) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (57.5361,-40.4897) .. controls (57.5361,-41.4876) and
(56.7272,-42.2965) .. (55.7293,-42.2965) .. controls (54.7315,-42.2965) and
(53.9226,-41.4876) .. (53.9226,-40.4897) .. controls (53.9226,-39.4919) and
(54.7315,-38.6830) .. (55.7293,-38.6830) .. controls (56.7272,-38.6830) and
(57.5361,-39.4919) .. (57.5361,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (56.9338,-40.4897) .. controls (56.9338,-41.1550) and
(56.3946,-41.6942) .. (55.7293,-41.6942) .. controls (55.0641,-41.6942) and
(54.5248,-41.1550) .. (54.5248,-40.4897) .. controls (54.5248,-39.8245) and
(55.0641,-39.2852) .. (55.7293,-39.2852) .. controls (56.3946,-39.2852) and
(56.9338,-39.8245) .. (56.9338,-40.4897) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=black] (-12.3358,-12.4506) .. controls (-12.3358,-13.4484) and
(-13.1447,-14.2573) .. (-14.1426,-14.2573) .. controls (-15.1404,-14.2573) and
(-15.9493,-13.4484) .. (-15.9493,-12.4506) .. controls (-15.9493,-11.4528) and
(-15.1404,-10.6438) .. (-14.1426,-10.6438) .. controls (-13.1447,-10.6438) and
(-12.3358,-11.4528) .. (-12.3358,-12.4506) -- cycle;
end{scope}
begin{scope}[cm={{1.0,0.0,0.0,1.0,(207.183,174.51)}}]
path[fill=cffffff] (-12.9381,-12.4506) .. controls (-12.9381,-13.1158) and
(-13.4774,-13.6551) .. (-14.1426,-13.6551) .. controls (-14.8078,-13.6551) and
(-15.3471,-13.1158) .. (-15.3471,-12.4506) .. controls (-15.3471,-11.7854) and
(-14.8078,-11.2461) .. (-14.1426,-11.2461) .. controls (-13.4774,-11.2461) and
(-12.9381,-11.7854) .. (-12.9381,-12.4506) -- cycle;
end{scope}
begin{scope}[shift={(209.733,171.904)}]
path (8.9640,-8.3400) .. controls (8.9640,-8.4480) and (8.8800,-8.4480) ..
(8.8560,-8.4480) .. controls (8.8320,-8.4480) and (8.7840,-8.4480) ..
(8.6880,-8.3280) -- (7.8600,-7.3200) .. controls (7.4400,-8.0400) and
(6.7800,-8.4480) .. (5.8800,-8.4480) .. controls (3.2880,-8.4480) and
(0.6000,-5.8200) .. (0.6000,-3.0000) .. controls (0.6000,-0.9960) and
(2.0040,0.2520) .. (3.7560,0.2520) .. controls (4.7160,0.2520) and
(5.5560,-0.1560) .. (6.2520,-0.7440) .. controls (7.2960,-1.6200) and
(7.6080,-2.7840) .. (7.6080,-2.8800) .. controls (7.6080,-2.9880) and
(7.5120,-2.9880) .. (7.4760,-2.9880) .. controls (7.3680,-2.9880) and
(7.3560,-2.9160) .. (7.3320,-2.8680) .. controls (6.7800,-0.9960) and
(5.1600,-0.0960) .. (3.9600,-0.0960) .. controls (2.6880,-0.0960) and
(1.5840,-0.9120) .. (1.5840,-2.6160) .. controls (1.5840,-3.0000) and
(1.7040,-5.0880) .. (3.0600,-6.6600) .. controls (3.7200,-7.4280) and
(4.8480,-8.1000) .. (5.9880,-8.1000) .. controls (7.3080,-8.1000) and
(7.8960,-7.0080) .. (7.8960,-5.7840) .. controls (7.8960,-5.4720) and
(7.8600,-5.2080) .. (7.8600,-5.1600) .. controls (7.8600,-5.0520) and
(7.9800,-5.0520) .. (8.0160,-5.0520) .. controls (8.1480,-5.0520) and
(8.1600,-5.0640) .. (8.2080,-5.2800) -- (8.9640,-8.3400) -- cycle;
end{scope}
begin{scope}[shift={(149.391,171.904)}]
path (1.8840,-0.8880) .. controls (1.7760,-0.4680) and (1.7520,-0.3480) ..
(0.9120,-0.3480) .. controls (0.6840,-0.3480) and (0.5640,-0.3480) ..
(0.5640,-0.1320) .. controls (0.5640,0.0000) and (0.6360,0.0000) ..
(0.8760,0.0000) -- (4.6800,0.0000) .. controls (7.1040,0.0000) and
(9.4680,-2.5080) .. (9.4680,-5.1840) .. controls (9.4680,-6.9120) and
(8.4360,-8.1960) .. (6.7200,-8.1960) -- (2.8680,-8.1960) .. controls
(2.6400,-8.1960) and (2.5320,-8.1960) .. (2.5320,-7.9680) .. controls
(2.5320,-7.8480) and (2.6400,-7.8480) .. (2.8200,-7.8480) .. controls
(3.5520,-7.8480) and (3.5520,-7.7520) .. (3.5520,-7.6200) .. controls
(3.5520,-7.5960) and (3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880)
-- cycle(4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (6.3600,-7.8480) .. controls (7.4880,-7.8480) and
(8.5200,-7.2360) .. (8.5200,-5.5800) .. controls (8.5200,-4.9800) and
(8.2800,-2.8920) .. (7.1160,-1.5720) .. controls (6.7800,-1.1760) and
(5.8680,-0.3480) .. (4.4880,-0.3480) -- (3.1200,-0.3480) .. controls
(2.9520,-0.3480) and (2.9280,-0.3480) .. (2.8560,-0.3600) .. controls
(2.7240,-0.3720) and (2.7120,-0.3960) .. (2.7120,-0.4920) .. controls
(2.7120,-0.5760) and (2.7360,-0.6480) .. (2.7600,-0.7560) -- (4.4160,-7.3800)
-- cycle;
end{scope}
begin{scope}[shift={(265.462,131.415)}]
path (4.4160,-7.3800) .. controls (4.5240,-7.8240) and (4.5720,-7.8480) ..
(5.0400,-7.8480) -- (5.9040,-7.8480) .. controls (6.9360,-7.8480) and
(7.7040,-7.5360) .. (7.7040,-6.6000) .. controls (7.7040,-5.9880) and
(7.3920,-4.2240) .. (4.9800,-4.2240) -- (3.6240,-4.2240) -- (4.4160,-7.3800)
-- cycle(6.0840,-4.0800) .. controls (7.5720,-4.4040) and (8.7360,-5.3640) ..
(8.7360,-6.3960) .. controls (8.7360,-7.3320) and (7.7880,-8.1960) ..
(6.1200,-8.1960) -- (2.8680,-8.1960) .. controls (2.6280,-8.1960) and
(2.5200,-8.1960) .. (2.5200,-7.9680) .. controls (2.5200,-7.8480) and
(2.6040,-7.8480) .. (2.8320,-7.8480) .. controls (3.5520,-7.8480) and
(3.5520,-7.7520) .. (3.5520,-7.6200) .. controls (3.5520,-7.5960) and
(3.5520,-7.5240) .. (3.5040,-7.3440) -- (1.8840,-0.8880) .. controls
(1.7760,-0.4680) and (1.7520,-0.3480) .. (0.9240,-0.3480) .. controls
(0.6480,-0.3480) and (0.5640,-0.3480) .. (0.5640,-0.1200) .. controls
(0.5640,0.0000) and (0.6960,0.0000) .. (0.7320,0.0000) .. controls
(0.9480,0.0000) and (1.2000,-0.0240) .. (1.4280,-0.0240) -- (2.8440,-0.0240)
.. controls (3.0600,-0.0240) and (3.3120,0.0000) .. (3.5280,0.0000) ..
controls (3.6240,0.0000) and (3.7560,0.0000) .. (3.7560,-0.2280) .. controls
(3.7560,-0.3480) and (3.6480,-0.3480) .. (3.4680,-0.3480) .. controls
(2.7360,-0.3480) and (2.7360,-0.4440) .. (2.7360,-0.5640) .. controls
(2.7360,-0.5760) and (2.7360,-0.6600) .. (2.7600,-0.7560) -- (3.5640,-3.9840)
-- (5.0040,-3.9840) .. controls (6.1440,-3.9840) and (6.3600,-3.2640) ..
(6.3600,-2.8680) .. controls (6.3600,-2.6880) and (6.2400,-2.2200) ..
(6.1560,-1.9080) .. controls (6.0240,-1.3560) and (5.9880,-1.2240) ..
(5.9880,-0.9960) .. controls (5.9880,-0.1440) and (6.6840,0.2520) ..
(7.4880,0.2520) .. controls (8.4600,0.2520) and (8.8800,-0.9360) ..
(8.8800,-1.1040) .. controls (8.8800,-1.1880) and (8.8200,-1.2240) ..
(8.7480,-1.2240) .. controls (8.6520,-1.2240) and (8.6280,-1.1520) ..
(8.6040,-1.0560) .. controls (8.3160,-0.2040) and (7.8240,0.0120) ..
(7.5240,0.0120) .. controls (7.2240,0.0120) and (7.0320,-0.1200) ..
(7.0320,-0.6600) .. controls (7.0320,-0.9480) and (7.1760,-2.0400) ..
(7.1880,-2.1000) .. controls (7.2480,-2.5440) and (7.2480,-2.5920) ..
(7.2480,-2.6880) .. controls (7.2480,-3.5640) and (6.5400,-3.9360) ..
(6.0840,-4.0800) -- cycle;
end{scope}
begin{scope}[shift={(186.682,173.799)}]
path (10.8360,-6.8640) .. controls (11.1120,-7.3320) and (11.3760,-7.7760) ..
(12.0960,-7.8480) .. controls (12.2040,-7.8600) and (12.3120,-7.8720) ..
(12.3120,-8.0640) .. controls (12.3120,-8.1960) and (12.2040,-8.1960) ..
(12.1680,-8.1960) .. controls (12.1440,-8.1960) and (12.0600,-8.1720) ..
(11.2680,-8.1720) .. controls (10.9080,-8.1720) and (10.5360,-8.1960) ..
(10.1880,-8.1960) .. controls (10.1160,-8.1960) and (9.9720,-8.1960) ..
(9.9720,-7.9680) .. controls (9.9720,-7.8600) and (10.0680,-7.8480) ..
(10.1400,-7.8480) .. controls (10.3800,-7.8360) and (10.7640,-7.7640) ..
(10.7640,-7.3920) .. controls (10.7640,-7.2360) and (10.7160,-7.1520) ..
(10.5960,-6.9480) -- (7.3200,-1.2120) -- (6.8880,-7.4640) .. controls
(6.8880,-7.6080) and (7.0200,-7.8360) .. (7.6920,-7.8480) .. controls
(7.8480,-7.8480) and (7.9680,-7.8480) .. (7.9680,-8.0760) .. controls
(7.9680,-8.1960) and (7.8480,-8.1960) .. (7.7880,-8.1960) .. controls
(7.3680,-8.1960) and (6.9240,-8.1720) .. (6.4920,-8.1720) -- (5.8680,-8.1720)
.. controls (5.6880,-8.1720) and (5.4720,-8.1960) .. (5.2920,-8.1960) ..
controls (5.2200,-8.1960) and (5.0760,-8.1960) .. (5.0760,-7.9680) .. controls
(5.0760,-7.8480) and (5.1600,-7.8480) .. (5.3640,-7.8480) .. controls
(5.9160,-7.8480) and (5.9160,-7.8360) .. (5.9640,-7.1040) -- (6.0000,-6.6720)
-- (2.8920,-1.2120) -- (2.4480,-7.4040) .. controls (2.4480,-7.5360) and
(2.4480,-7.8360) .. (3.2640,-7.8480) .. controls (3.3960,-7.8480) and
(3.5280,-7.8480) .. (3.5280,-8.0640) .. controls (3.5280,-8.1960) and
(3.4200,-8.1960) .. (3.3480,-8.1960) .. controls (2.9280,-8.1960) and
(2.4840,-8.1720) .. (2.0520,-8.1720) -- (1.4280,-8.1720) .. controls
(1.2480,-8.1720) and (1.0320,-8.1960) .. (0.8520,-8.1960) .. controls
(0.7800,-8.1960) and (0.6360,-8.1960) .. (0.6360,-7.9680) .. controls
(0.6360,-7.8480) and (0.7320,-7.8480) .. (0.9000,-7.8480) .. controls
(1.4640,-7.8480) and (1.4760,-7.7760) .. (1.5000,-7.3920) -- (2.0280,-0.0240)
.. controls (2.0400,0.1800) and (2.0520,0.2520) .. (2.1960,0.2520) .. controls
(2.3160,0.2520) and (2.3400,0.2040) .. (2.4480,0.0240) -- (6.0240,-6.2280) --
(6.4680,-0.0240) .. controls (6.4800,0.1800) and (6.4920,0.2520) ..
(6.6360,0.2520) .. controls (6.7560,0.2520) and (6.7920,0.1920) ..
(6.8880,0.0240) -- (10.8360,-6.8640) -- cycle;
end{scope}
end{scope}
end{tikzpicture}
end{document}
The graphics looks fine, but the labels vanished somehow.
edited Apr 10 '13 at 20:09
answered Apr 10 '13 at 15:40
g.kovg.kov
17.4k13976
17.4k13976
add a comment |
add a comment |
With PSTricks and explanation.
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
edefA{2}% semi-major
edefB{1}% semi-minor
edefCx{3}% center abscissa
edefCy{3}% center ordinate
% parametric representation of an ellipse
edefX(#1){A*cos(#1)+Cx}
edefY(#1){B*sin(#1)+Cy}
% the left focus point in RPN notation
% [-sqrt(A^2-B^2)+Cx,Cy]
edefF{!Aspace 2 exp Bspace 2 exp sub sqrt neg Cxspace add
Cy }
psset{algebraic}
begin{document}
begin{pspicture}[showgrid](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}% plot the ellipse from 0 to 2*pi
curvepnode{Pi 4 div}{X(t)|Y(t)}{P}% define the point P through which the tangent line passes
% curvepnode also produces a unit tangent vector named Ptang
%----------------------------------------------------------------------------------------------
pnode(Cx,Cy){C}% define the center
pnode(F){F}% define the focus
%----------------------------------------------------------------------------------------------
nodexn{-2(Ptang)+(C)}{S}% vector S = -2 Ptang + C
nodexn{2(Ptang)+(C)}{T}% vector T = 2 Ptang + C
%-----------------------------------------------------------------------------------------------
psline[linecolor=red](S)(T)% draw the line passing through C and parallel to the unit tangent vector
psxline[linecolor=green](P){(S)-(C)}{(T)-(C)}% draw a line from vector P + S - C to P + T - C
pcline[nodesep=-1,linecolor=blue](F)(P)% drawn a line from F to P
pstInterLL[PointName=none]{F}{P}{S}{T}{I}% find the intersection point I between line FP and ST
psdots(P)(C)(F)% draw the points P, C, F
end{pspicture}
end{document}
Animation
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
usepackage[nomessages]{fp}
defX(#1){2*cos(#1)+3}
defY(#1){sin(#1)+3}
FPsetN{20}
FPevalStep{round(2*pi/N:2)}
psset{algebraic,unit=0.5}
begin{document}
multido{n=0.00+Step}{N}{%
begin{pspicture*}[showgrid=false](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}
curvepnode{n}{X(t)|Y(t)}{P}
pnode(3,3){Q}
pnode(!3 sqrt neg 3 add 3){F}
nodexn{-3(Ptang)+(Q)}{A}
nodexn{3(Ptang)+(Q)}{B}
psline[linecolor=red](A)(B)
psxline[linecolor=green](P){(A)-(Q)}{(B)-(Q)}
pcline[nodesep=-2,linecolor=blue](F)(P)
pstInterLL[PointName=none]{F}{P}{A}{B}{I}
psdots(P)(Q)(F)
end{pspicture*}}
end{document}
add a comment |
With PSTricks and explanation.
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
edefA{2}% semi-major
edefB{1}% semi-minor
edefCx{3}% center abscissa
edefCy{3}% center ordinate
% parametric representation of an ellipse
edefX(#1){A*cos(#1)+Cx}
edefY(#1){B*sin(#1)+Cy}
% the left focus point in RPN notation
% [-sqrt(A^2-B^2)+Cx,Cy]
edefF{!Aspace 2 exp Bspace 2 exp sub sqrt neg Cxspace add
Cy }
psset{algebraic}
begin{document}
begin{pspicture}[showgrid](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}% plot the ellipse from 0 to 2*pi
curvepnode{Pi 4 div}{X(t)|Y(t)}{P}% define the point P through which the tangent line passes
% curvepnode also produces a unit tangent vector named Ptang
%----------------------------------------------------------------------------------------------
pnode(Cx,Cy){C}% define the center
pnode(F){F}% define the focus
%----------------------------------------------------------------------------------------------
nodexn{-2(Ptang)+(C)}{S}% vector S = -2 Ptang + C
nodexn{2(Ptang)+(C)}{T}% vector T = 2 Ptang + C
%-----------------------------------------------------------------------------------------------
psline[linecolor=red](S)(T)% draw the line passing through C and parallel to the unit tangent vector
psxline[linecolor=green](P){(S)-(C)}{(T)-(C)}% draw a line from vector P + S - C to P + T - C
pcline[nodesep=-1,linecolor=blue](F)(P)% drawn a line from F to P
pstInterLL[PointName=none]{F}{P}{S}{T}{I}% find the intersection point I between line FP and ST
psdots(P)(C)(F)% draw the points P, C, F
end{pspicture}
end{document}
Animation
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
usepackage[nomessages]{fp}
defX(#1){2*cos(#1)+3}
defY(#1){sin(#1)+3}
FPsetN{20}
FPevalStep{round(2*pi/N:2)}
psset{algebraic,unit=0.5}
begin{document}
multido{n=0.00+Step}{N}{%
begin{pspicture*}[showgrid=false](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}
curvepnode{n}{X(t)|Y(t)}{P}
pnode(3,3){Q}
pnode(!3 sqrt neg 3 add 3){F}
nodexn{-3(Ptang)+(Q)}{A}
nodexn{3(Ptang)+(Q)}{B}
psline[linecolor=red](A)(B)
psxline[linecolor=green](P){(A)-(Q)}{(B)-(Q)}
pcline[nodesep=-2,linecolor=blue](F)(P)
pstInterLL[PointName=none]{F}{P}{A}{B}{I}
psdots(P)(Q)(F)
end{pspicture*}}
end{document}
add a comment |
With PSTricks and explanation.
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
edefA{2}% semi-major
edefB{1}% semi-minor
edefCx{3}% center abscissa
edefCy{3}% center ordinate
% parametric representation of an ellipse
edefX(#1){A*cos(#1)+Cx}
edefY(#1){B*sin(#1)+Cy}
% the left focus point in RPN notation
% [-sqrt(A^2-B^2)+Cx,Cy]
edefF{!Aspace 2 exp Bspace 2 exp sub sqrt neg Cxspace add
Cy }
psset{algebraic}
begin{document}
begin{pspicture}[showgrid](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}% plot the ellipse from 0 to 2*pi
curvepnode{Pi 4 div}{X(t)|Y(t)}{P}% define the point P through which the tangent line passes
% curvepnode also produces a unit tangent vector named Ptang
%----------------------------------------------------------------------------------------------
pnode(Cx,Cy){C}% define the center
pnode(F){F}% define the focus
%----------------------------------------------------------------------------------------------
nodexn{-2(Ptang)+(C)}{S}% vector S = -2 Ptang + C
nodexn{2(Ptang)+(C)}{T}% vector T = 2 Ptang + C
%-----------------------------------------------------------------------------------------------
psline[linecolor=red](S)(T)% draw the line passing through C and parallel to the unit tangent vector
psxline[linecolor=green](P){(S)-(C)}{(T)-(C)}% draw a line from vector P + S - C to P + T - C
pcline[nodesep=-1,linecolor=blue](F)(P)% drawn a line from F to P
pstInterLL[PointName=none]{F}{P}{S}{T}{I}% find the intersection point I between line FP and ST
psdots(P)(C)(F)% draw the points P, C, F
end{pspicture}
end{document}
Animation
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
usepackage[nomessages]{fp}
defX(#1){2*cos(#1)+3}
defY(#1){sin(#1)+3}
FPsetN{20}
FPevalStep{round(2*pi/N:2)}
psset{algebraic,unit=0.5}
begin{document}
multido{n=0.00+Step}{N}{%
begin{pspicture*}[showgrid=false](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}
curvepnode{n}{X(t)|Y(t)}{P}
pnode(3,3){Q}
pnode(!3 sqrt neg 3 add 3){F}
nodexn{-3(Ptang)+(Q)}{A}
nodexn{3(Ptang)+(Q)}{B}
psline[linecolor=red](A)(B)
psxline[linecolor=green](P){(A)-(Q)}{(B)-(Q)}
pcline[nodesep=-2,linecolor=blue](F)(P)
pstInterLL[PointName=none]{F}{P}{A}{B}{I}
psdots(P)(Q)(F)
end{pspicture*}}
end{document}
With PSTricks and explanation.
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
edefA{2}% semi-major
edefB{1}% semi-minor
edefCx{3}% center abscissa
edefCy{3}% center ordinate
% parametric representation of an ellipse
edefX(#1){A*cos(#1)+Cx}
edefY(#1){B*sin(#1)+Cy}
% the left focus point in RPN notation
% [-sqrt(A^2-B^2)+Cx,Cy]
edefF{!Aspace 2 exp Bspace 2 exp sub sqrt neg Cxspace add
Cy }
psset{algebraic}
begin{document}
begin{pspicture}[showgrid](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}% plot the ellipse from 0 to 2*pi
curvepnode{Pi 4 div}{X(t)|Y(t)}{P}% define the point P through which the tangent line passes
% curvepnode also produces a unit tangent vector named Ptang
%----------------------------------------------------------------------------------------------
pnode(Cx,Cy){C}% define the center
pnode(F){F}% define the focus
%----------------------------------------------------------------------------------------------
nodexn{-2(Ptang)+(C)}{S}% vector S = -2 Ptang + C
nodexn{2(Ptang)+(C)}{T}% vector T = 2 Ptang + C
%-----------------------------------------------------------------------------------------------
psline[linecolor=red](S)(T)% draw the line passing through C and parallel to the unit tangent vector
psxline[linecolor=green](P){(S)-(C)}{(T)-(C)}% draw a line from vector P + S - C to P + T - C
pcline[nodesep=-1,linecolor=blue](F)(P)% drawn a line from F to P
pstInterLL[PointName=none]{F}{P}{S}{T}{I}% find the intersection point I between line FP and ST
psdots(P)(C)(F)% draw the points P, C, F
end{pspicture}
end{document}
Animation
documentclass[pstricks,border=12pt]{standalone}
usepackage{pst-eucl,pst-plot}
usepackage[nomessages]{fp}
defX(#1){2*cos(#1)+3}
defY(#1){sin(#1)+3}
FPsetN{20}
FPevalStep{round(2*pi/N:2)}
psset{algebraic,unit=0.5}
begin{document}
multido{n=0.00+Step}{N}{%
begin{pspicture*}[showgrid=false](6,6)
psparametricplot{0}{Pi 2 mul}{X(t)|Y(t)}
curvepnode{n}{X(t)|Y(t)}{P}
pnode(3,3){Q}
pnode(!3 sqrt neg 3 add 3){F}
nodexn{-3(Ptang)+(Q)}{A}
nodexn{3(Ptang)+(Q)}{B}
psline[linecolor=red](A)(B)
psxline[linecolor=green](P){(A)-(Q)}{(B)-(Q)}
pcline[nodesep=-2,linecolor=blue](F)(P)
pstInterLL[PointName=none]{F}{P}{A}{B}{I}
psdots(P)(Q)(F)
end{pspicture*}}
end{document}
edited Apr 10 '13 at 15:39
answered Apr 10 '13 at 12:31
kiss my armpitkiss my armpit
13.1k20174405
13.1k20174405
add a comment |
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f107902%2fhow-do-i-make-tangents-to-ellipses-and-lines-parallel-to-these%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
This question can be useful: How to draw tangent line of an arbitrary point on a path in TikZ.
– m0nhawk
Apr 10 '13 at 11:32
possible duplicate of How to draw tangent line of an arbitrary point on a path in TikZ
– Charles Stewart
Apr 10 '13 at 11:39
I did use exactly that one to solve part 1, but I am having trouble using it to solve 2. and 3.
– Zaefox
Apr 10 '13 at 12:07
Could you please update your question, to show your current advance, and to state as clearly as possible what you need to do, and what you have tried for that? In its current form, it definitely looks like a duplicate of the above link.
– T. Verron
Apr 10 '13 at 13:24