Professional Documents
Culture Documents
Ang
Ang
Ang
"lupain ng mga sibilisadong hari" o "katutubong lupain" [note 1])[1] ay isang sinaunang kabihasnan at
historikal na rehiyon sa Mesopotamiasa modernong Iraq noong mga panahong Chalcolithic at
maagang panahong Tanso. Bagaman ang mga pinakamaagang historikal rekord sa rehiyong ito ay
hindi mas maaga sa ca. 2900 BCE, ang mga modernong historyan ay nagsasaad na ang Sumerya
ay unang tinirhan ng mga taong hindi-Semitiko na maaring nagsalita ng wikang Sumeryosa pagitan
ng ca. 4500 BCE at 4000 BCE dahil sa mga ebidensiya ng mga pangalan ng siyudad, mga ilog at
iba pa.[2]Ang mga pinagpapalagay na prehistorikong mga taong ito ay tinatawag ngayon ng mga
skolar na mga "proto-Euphratean" o mga "Ubaidian",[3] na pinaniniwalaang nagebolb mula
sa kulturang Samarra ng Hilagaang Mesopotomia (Assyria).[4][5][6][7] Ang mga Ubaidian ang mga
unang nagpaunlad ng kabihasnan sa rehiyon sa pamamagitan ng pagpapaunlad ng irigasyon,
pagpapaunlad ng kalakalan, pagtatatag ng mga industriya kabilang ang paghahabi, pagkakatad,
pagmemetal, masonriya at pagpapalayok.[3] Ang kabihasnang Sumeryo ay nagkaanyo sa panahong
Uruk (ika-4 milenyo BCE) na nagpatuloy hanggang sa Jemdat Nasr at mga panahong Maagang
Dinastiko. Noong ika-3 milenyo BCE, ang isang malapit na simbiosis na kultural ay nabuo sa pagitan
ng mga Sumeryo (na nagsasalita ng Hiwalay na wika) at mga tagapagsalitang Semitikong
Akkadiano na kinabibilangan ng malawakang bilingualismo. [8] Ang impluwensiya ng wikang
Sumerian sa wikang Akkadian at bise bersa ay ebidente sa lahat ng mga sakop mula sa
malawakang panghihiram naleksikal hanggang sa
pagtatagpong sintaktiko, morpolohikal at ponolohikal.[8] Ito ay nagtulak sa mga skolar na tukuyin ang
wikang Sumerian at Akkadian noong ikatlong milenyo BCE bilang isang sprachbund.[8] Ang Sumerya
ay sinakop ng mga nagsasalita ng Semitikong mga hari ng Imperyong Akkadian noong mga 2270
BCE (maikling kronolohiya) ngunit ang wikang Sumeryo ay nagptuloy bilang isang sagradong wika.
Ang katutubong pamumunong Sumeryo ay muling umahon sa loob ng isang siglo ng Ikatlong
Dinastiya ng Ur (Renasimiyentong Sumeryo) ng ika-21 hanggang ika-20 siglo BCE ngunit ang
wikang Akkadian ay nanatiling ginagamit sa panahong ito. Ang siyudad na Sumeryong Eridu sa
baybayin ng Golpong Persiko(Persian Gulf) ang kauna-unahang siyudad sa mundo kung saan ang
tatlong magkakahiwalay na mga kultura ay nagsama-ng mga magsasakang Ubaidiano na
nabubuhay sa mga kubong putik at brick at nagsasanay ng irigasyon, mga nomadikong Semitikong
mga magpapastol na nabubuhay sa mga itim na told at nagpapastol ng mga tupa at kambing, at
mga mangingisda na nabubuhay sa mga kubong reed na maaaring mga ninuno ng mga Sumeryo. [9]
Ang labis na maiimbak na mga pagkain na nalikha ng ekonomiyang ito ay pumayag sa populasyon
ng rehiyong ito na tumira sa isang lugar sa halip na magpagala-gala bilang mga mangangaso. Ang
Sumerya ay lugar rin ng maagang pag-unlad ng pagsusulat na sumulong mula sa isang yugto
ng proto-pagsusulat noong gitnang ika-4 milenyo BCE hanggang sa kuneipormang Sumeryo sa
ikatlong milenyo BCE.
Panahong Uruk: 4100 2900 BCE (Huling Chalcolithic hanggang Maagang Panahong
Tanso I)
Ang talaan ng mga haring Sumeryo ay nagtatala ng mga hari ng Sumerya. Bagaman ang mga
dinastiyang namuno ay itinalang magkakasunod dito, ang ilan sa mga pinunong ito ay aktuwal na
namuno ng sabay sa mga magkaibang lugar.
Ang dinastiyang ito ay umiral noong mga ika-26 siglo BCE. Si Meskalamdug ang unang hari ng Ur
na pinatayunan ng arkeolohiya.
Mga sumunod pang dinastiya[baguhin | baguhin ang batayan]
Ang Ur ay natalo at ang pahahari ay dinala sa Awan. Ang dinastiyang Awan ay umiral noong mga
ika-26 siglo BCE. Ang Awan ay natalo at ang paghahari ay dinala sa Kish. Ang Ikalawang Dinastiya
ng Kish ay pinamunuan ng 8 pinuno. Pagkatapo sna matalo ang Kish, ang paghahari ay dinala
sa Hamazi. Ang Hamazi ay pinamunuan ng isang 1 pinuno. Ang Hamazi ay natalo at ang paghahari
ay dinala sa Uruk. Ang Ikalawang Dinastiya ng Uruk ay pinamunuan ng 3 pinuno. Ang Uruk ay
natalo at ang paghahari ay dinala sa Ur. Ang Ur ay natalo at ang paghahari ay dinala sa Adab. Ang
Adab ay natalo at ang paghahari ay dinala sa Mari. Ang Mari ay natalo at ang paghahari ay dinala
sa Kish. Ang Ikatlong Dinastiya ng Kish ay natalo at ang paghahari ay dinala sa Akshak. Ang Akshak
ay natalo at ang paghahari ay dinala sa Kish. Ang Ikaapat na Dinastiya ng Kish ay natalo at ang
paghahari ay dinala sa Uruk. Ang Unang Dinastiya ng Lagash ay umiral noong ika-25 siglo BCE at si
En-hegal ang unang pinuno nito bilang isang tributaryo ng Uruk. Si Urukagina (ca. 23592335 BCE
maikling kronolohiya) ay pinabagsak at ang kanyang siyudad na Lagash ay nabihag ng dakilang
saserdote ng Umma na si Lugal-zage-si. Sinakop ni Lugal-zage-si ang Uruk at Ur at ginawa niyang
kabisera ang Uruk. Gumawa siya ng mga mahabang inskripsiyon sa mga batong base na inalay sa
Diyos na Enlil ng Nippur. Siya ay pinabagsak ni Sargon ng Akkad at ang paghahari ay dinala sa
Akkad na tumagal ng ca. 2334 hanggang 2218 BCE (maikling kronolohiya). Ang Akkad ay natalo ng
mga Gutian na namuno ng mga isangsiglo. Ang ikalawang Dinastiya ng Lagash ay tumagal ng ca.
2260 hanggang 2110 BCE. Ang mga Gutian ay pinalayas ng mga Sumeryo sa ilalim ni Utuhengal ng Uruk. Si Utu-hegal ay natalo ni Ur-Nammu na nagtatag ng Ikatlong Dinastiya ng Ur na
tumagal ng ca. 2047 hanggang 1940 BCE sa maikling kronolohiya.
Ang pagsulat sa Sumerya ang pinakamatandang halimbawa ng pagsulat sa mundo. Ang malaking
bilang ng mga libo libong kasulatan sa wikang Sumeryo ay nakaligtas gaya ng mga liham na
personal o pangnegosyo, mga resibo, mga talaang leksikal, mga batas, mga imno, mga panalangin,
mga kuwento, mga talaang pang-araw araw at mga aklatang puno ng mga tabletang putik. Ang
sistema ng kanilang pagsulat ay tinatawag na Cuneiform.
P = P1 + u (P2 - P1)
The point P3 (x3,y3) is closest to the line at the tangent to the line which passes
through P3, that is, the dot product of the tangent and line is 0, thus
(P3 - P) dot (P2 - P1) = 0
Substituting the equation of the line gives
[P3 - P1 - u(P2 - P1)] dot (P2 - P1) = 0
Solving this gives the value of u
Substituting this into the equation of the line gives the point of intersection (x,y) of the
tangent as
x = x1 + u (x2 - x1)
y = y1 + u (y2 - y1)
The distance therefore between the point P3 and the line is the distance between (x,y)
above and P3.
Notes
Contributed implementations
C source from Damian Coventry: C source code
The minimum distance between Pa and the plane is given by the absolute value of
(A xa + B ya + C za + D) / sqrt(A2 + B2 + C2)
...1
To derive this result consider the projection of the line (Pa - Pb) onto the normal of the
plane n, that is just ||Pa - Pb|| cos(theta), where theta is the angle between (Pa - Pb) and
the normal n. This projection is the minimum distance of Pa to the plane.
This can be written in terms of the dot product as
minimum distance = (Pa - Pb) dot n / ||n||
That is
minimum distance = (A (xa - xb) + B (ya - yb) + C (za - zb)) / sqrt(A2 + B2 + C2)
...2
...3
Substituting either of these into the corresponding equation for the line gives the
intersection point. For example the intersection point (x,y) is
x = x1 + ua (x2 - x1)
y = y1 + ua (y2 - y1)
Notes:
The denominators for the equations for ua and ub are the same.
The equations apply to lines, if the intersection of line
segments is required then it is only necessary to test if ua and ub lie
between 0 and 1. Whichever one lies within that range then the
corresponding line segment contains the intersection point. If both
lie within the range of 0 to 1 then the intersection point is within
both line segments.
Source code
Original C code by Paul Bourke.
C++ contribution by Damian Coventry.
LISP implementation by Paul Reiners.
C version for Rockbox firmware by Karl Kurbjun.
C# version by Olaf Rabbachin.
VB.net version by Olaf Rabbachin.
VBA implementation by Giuseppe Iaria.
There are two approaches to finding the shortest line segment between lines "a" and
"b". The first is to write down the length of the line segment joining the two lines and
then find the minimum. That is, minimise the following
|| Pb - Pa ||2
Substituting the equations of the lines gives
|| P1 - P3 + mua (P2 - P1) - mub (P4 - P3) ||2
The above can then be expanded out in the (x,y,z) components. There are conditions
to be met at the minimum, the derivative with respect to mu a and mub must be zero.
Note: it is easy to convince oneself that the above function only has one minima and
no other minima or maxima. These two equations can then be solved for mu a and mub,
the actual intersection points found by substituting the values of mu into the original
equations of the line.
An alternative approach but one that gives the exact same equations is to realise that
the shortest line segment between the two lines will be perpendicular to the two lines.
This allows us to write two equations for the dot product as
Solution 1
The equation of a plane (points P are on the plane with
normal N and point P3 on the plane) can be written as
N dot (P - P3) = 0
The equation of the line (points P on the line passing through
points P1 and P2) can be written as
P = P1 + u (P2 - P1)
The intersection of these two occurs when
N dot (P1 + u (P2 - P1)) = N dot P3
Solving for u gives
Note
Solution 2
A plane can also be represented by the equation
Ax+By+Cz+D=0
where all points (x,y,z) lie on the plane.
Substituting in the equation of the line through points P1 (x1,y1,z1) and P2 (x2,y2,z2)
P = P1 + u (P2 - P1)
gives
A (x1 + u (x2 - x1)) + B (y1 + u (y2 - y1)) + C (z1 + u (z2 - z1)) + D
=0
Solving for u
Note
and there are no solutions or the line is on the plane in which case
are infinite solutions
Equation of a plane
Written by Paul Bourke
March 1989
Given three points in space (x1,y1,z1), (x2,y2,z2), (x3,y3,z3) the equation of the plane
through these points is given by the following determinants.
The sign of s = Ax + By + Cz + D determines which side the point (x,y,z) lies with
respect to the plane. If s > 0 then the point lies on the same side as the normal
(A,B,C). If s < 0 then it lies on the opposite side, if s = 0 then the point (x,y,z) lies on
the plane.
Alternatively
If vector N is the normal to the plane then all points p on the plane satisfy the
following
N.p=k
where . is the dot product between the two vectors.
ie: a . b = (ax,ay,az) . (bx,by,bz) = ax bx + ay by + az bz
Given any point a on the plane
N . (p - a) = 0
Where "*" is the cross product, "." is the dot product, and u is the parameter of the
line.
Taking the dot product of the above with each normal gives two equations with
unknowns c1 and c2.
N1 . p = d1 = c1 N1 . N1 + c2 N1 . N2
N2 . p = d2 = c1 N1 . N2 + c2 N2 . N2
Solving for c1 and c2
c1 = ( d1 N2 . N2 - d2 N1 . N2 ) / determinant
c2 = ( d2 N1 . N1 - d1 N1 . N2) / determinant
determinant = ( N1 . N1 ) ( N2 . N2 ) - ( N1 . N2 )2
Note that a test should first be performed to check that the planes aren't parallel or
coincident (also parallel), this is most easily achieved by checking that the cross
product of the two normals isn't zero. The planes are parallel if
N1 * N2 = 0
N1 . p = d1
N2 . p = d2
N3 . p = d3
In the above and what follows, "." signifies the dot product and "*" is the cross
product. The intersection point P is given by:
d 1 ( N2 * N3 ) + d 2 ( N3 * N1 ) + d 3 ( N1 * N2 )
P=
------------------------------------------------------------------------N1 . ( N2 * N3 )
The derivation is quite straightforward once one realises that for a point (r, theta) the x
axis is simply r cos(theta) and the y axis is r sin(theta). Substituting those into the
equation for the line gives the following result.
Question
Given a line defined by two points L1 L2, a point P1 and angle z (bearing from north)
find the intersection point between the direction vector from P1 to the line.
Short answer: choose a second point P2 along the direction vector from P1, say P2 =
(xP1+sin(z),yP1+cos(z)). Apply the algorthm here for the intersection of two line
segments. Perform the additional test that ub must be greater than 0, the solution where
ub is less than 0 is the solution in the direction z+180 degrees.
Plane-Plane Intersection
Two planes always intersect in a line as long as they are not parallel. Let the planes be specified in Hessian normal
form, then the line of intersection must be perpendicular to both
and
(1
)
To uniquely specify the line, it is necessary to also find a particular point on it. This can be determined by finding a
point that is simultaneously on both planes, i.e., a point
that satisfies
(2)
(3)
In general, this system is underdetermined, but a particular solution can be found by setting
(assuming the -
component of is not 0; or another analogous condition otherwise) and solving. The equation of the line of
intersection is then
(4
)
(Gellert et al. 1989, p. 542). A general approach avoiding the special treatment needed above is to define
(5)
(6)
to
where
, i.e.,
(7
)
for
is given by
(8
)
where
is the determinant of the matrix formed by writing the vectors
are parallel, then
(9
)
and there is no intersection (Gellert et al. 1989, p. 542; Goldman 1990). This condition can be checked easily for
planes in Hessian normal form.
A set of planes sharing a common line is called a sheaf of planes, while a set of planes sharing a common point is
called a bundle of planes.
Names of Angles
As the Angle Increases, the Name Changes:
Type of Angle
Description
Acute Angle
Right Angle
Obtuse Angle
Reflex Angle
Try It Yourself:
In One Diagram
This diagram might make it easier to remember:
Also: Acute, Obtuse and Reflex are in alphabetical order.
But the lines are the same ... so when naming the angles make sure
that you know which angle is being asked for!
Example: 67
Parts of an Angle
The corner point of an angle is called the vertex
And the two straight sides are called arms
The angle is the amount of turn between each arm.
segment. That is, s = d(P0,P(s)) / d(P0,P1). Further, if s < 0 then P(s) is outside the
segment on the P0 side, and if s > 1 then P(s) is outside the segment on
the P1 side.
Parallel Lines
These lines are parallel when and only when their directions are collinear, namely
when the two vectors
and
and
. In 2D, with
have
product condition:
has
, and the infinite lines are coincident. And if one line (but not the
other) is a finite segment, then it is the coincident intersection. However, if both
lines are finite segments, then they may (or may not) overlap. In this case, solve
for t0 and t1such that P0 = Q(t0) and P1 = Q(t1). If the segment intervals [t ,t ] and
[0,1] are disjoint, there is no intersection. Otherwise, intersect the intervals (using
0
Non-Parallel Lines
When the two lines or segments are not parallel, they might intersect in a unique
point. In 2D Euclidean space, infinite lines always intersect. In higher dimensions
they usually miss each other and do not intersect. But if they intersect, then their
linear projections onto a 2D plane will also intersect. So, one can simply restrict to
two coordinates, for which u and v are not parallel, compute the 2D intersection
point I at P(sI) andQ(tI) for those two coordinates, and then test if P(sI) = Q(tI) for
all coordinates. To compute the 2D intersection point, consider the two lines and
the associated vectors in the diagram:
is perpendicular to
where
, and this is
. Solving this
Plane Intersections
Planes are represented as described in Algorithm 4, see Planes.
Line-Plane Intersection
In 3D, a line L is either parallel to a plane P or intersects it in a single point.
Let L be given by the parametric equation:
the plane P be given by a point V0 on it and a normal vector
, and
. We first
one specific point of L, say P0, is contained in P , that is whether it satisfies the
implicit line equation:
If the line and plane are not parallel, then L and P intersect in a unique point P(sI)
which is computed using a method similar to the one for the intersection of two
lines in 2D. Consider the diagram:
is perpendicular
If the line L is a finite segment from P0 to P1, then one just has to check
that
plane. For a positive ray, there is an intersection with the plane when
Intersection of 2 Planes
In 3D, two planes P1 and P2 are either parallel or they intersect in a single straight
line L. Let P i (i = 1,2) be given by a point Vi and a normal vector ni, and have an
After computing
(3 adds + 6 multiplies), to fully determine the intersection
line, we still need to find a specific point on it. That is, we need to find a
point
that lies in both planes. We can do this by finding a common
solution of the implicit equations for P1 and P2. But there are only two equations in
the 3 unknowns since the point P0 can lie anywhere on the 1-dimensional line L.
So we need another constraint to solve for a specific P0. There are a number of
ways this could be done:
(A) Direct Linear Equation. One could set one coordinate to zero, say z0 = 0, and
then solve for the other two. But this will only work when L intersects the
plane z0 = 0. This is will be true when the z-coordinate uzof
is
nonzero. So, one must first select a nonzero coordinate of u, and then set the
corresponding coordinate of P0 to 0. Further, one should choose the coordinate
with the largest absolute value, as this will give the most robust computations.
Suppose that
equations:
, then
, one gets:
The denominator here is equal to the non-zero 3rd coordinate of u. So, ignoring the
test for a large nonzero coordinate, and counting division as a multiplication, the
total number of operations for this solution = 5 adds + 13 multiplies.
(B) Line Intersect Point. If one knows a specific line in one plane (for example,
two points in the plane), and this line intersects the other plane, then its point of
intersection, I, will lie in both planes. Thus, it is on the line of intersection for the
two planes, and the parametric equation of L is: P(s) = I + s (n1 x n2). To compute
and the intersection point (given the line), the total number of operations =
11 adds + 19 multiplies.
One way of constructing a line in one plane that must intersect the other plane is to
project one plane's normal vector onto the other plane. This gives a line that must
always be orthogonal to the line of the planes' intersection. So, the projection
of n2 on P1 defines a line that intersects P2 in the sought for point P0 on L. More
specifically, project the two points 0 = (0,0,0) and n2 = (nx2, ny2, nz2) to P1(0)
and P1(n2) respectively. Then the projected line in P1 is L1: Q(t) = P1(0) + t (P1(n2)
P1(0)), and intersection of it with P2 can be computed. In the most efficient case,
where both n1 and n2 are unit normal vectors and the constant P1(0) is pre-stored,
the total operations = 17 adds + 22 multiplies.
(C) 3 Plane Intersect Point. Another method selects a third plane P3 with an
implicit equation n3 P = 0 where n3 = n1 x n2 and d3 = 0 (meaning it passes through
the origin). This always works since: (1) L is perpendicular to P3 and thus
intersects it, and (2) the vectors n1, n2, and n3 are linearly independent. Thus the
planes P1, P2 and P3 intersect in a unique point P0 which must be on L. Using the
formula for the intersection of 3 planes (see the next section), where d3 = 0 for P3,
we get:
Intersection of 3 Planes
In 3D, three planes P1, P2 and P3 can intersect (or not) in the following ways:
Geometric Relation
Intersection
Algebraic Condition
for all
A plane
None
2 parallel lines
[planes coincide
=> 1 line]
Only one
for
for all
1 line
3 parallel lines
A unique point
One should first test for the most frequent case of a unique intersect point, namely
that
, since this excludes all the other cases. When the intersection
is a unique point, it is given by the formula:
which can verified by showing that this P0 satisfies the parametric equations for all
planes P1, P2 and P3.
However, there can be a problem with the robustness of this computation when the
denominator
is very small. In that case, it would be best to get a
robust line of intersection for two of the planes, and then compute the point where
this line intersects the third plane.
Implementations
Here are some sample "C++" implementations of these algorithms.
// Copyright 2001 softSurfer, 2012 Dan Sunday
// This code may be freely used, distributed and modified for any
purpose
// providing that this copyright notice is included with it.
// SoftSurfer makes no warranty for this code, and cannot be held
// liable for any real or imagined damage resulting from its use.
// Users of this code must verify correctness for their
application.
// Assume that classes are already given for the objects:
//
Point and Vector with
//
coordinates {float x, y, z;}
//
operators for:
//
== to test equality
//
!= to test inequality
//
Point
= Point Vector
//
Vector = Point - Point
//
Vector = Scalar * Vector
(scalar product)
//
Vector = Vector * Vector
(3D cross product)
//
Line and Ray and Segment with defining points {Point P0,
P1;}
//
(a Line is infinite, Rays and Segments start at P0)
//
(a Ray extends beyond P1, but a Segment ends at P1)
//
Plane with a point and a normal {Point V0; Vector n;}
//===============================================================
====
#define SMALL_NUM
0.00000001 // anything that avoids division
overflow
// dot product (3D) which allows vector operations in arguments
#define dot(u,v)
((u).x * (v).x + (u).y * (v).y + (u).z *
(v).z)
#define perp(u,v) ((u).x * (v).y - (u).y * (v).x) // perp
product (2D)
if (S1.P0 !=
points
S2.P0)
points
return 0;
*I0 = S1.P0;
point
return 1;
}
if (du==0) {
// S1 is a single point
if (inSegment(S1.P0, S2) == 0) // but is not in S2
return 0;
*I0 = S1.P0;
return 1;
}
if (dv==0) {
// S2 a single point
if (inSegment(S2.P0, S1) == 0) // but is not in S1
return 0;
*I0 = S2.P0;
return 1;
}
// they are collinear segments - get overlap (or not)
float t0, t1;
// endpoints of S1 in
eqn for S2
Vector w2 = S1.P1 - S2.P0;
if (v.x != 0) {
t0 = w.x / v.x;
t1 = w2.x / v.x;
}
else {
t0 = w.y / v.y;
t1 = w2.y / v.y;
}
if (t0 > t1) {
// must have t0 smaller
than t1
float t=t0; t0=t1; t1=t;
// swap if not
}
if (t0 > 1 || t1 < 0) {
return 0;
// NO overlap
}
t0 = t0<0? 0 : t0;
// clip to min 0
t1 = t1>1? 1 : t1;
// clip to max 1
if (t0 == t1) {
// intersect is a point
*I0 = S2.P0 + t0 * v;
return 1;
}
//===============================================================
====
D = dot(Pn.n, u);
N = -dot(Pn.n, w);
// segment is parallel
// segment lies in plane
// no intersection
// no intersection
*I = S.P0 + sI * u;
// compute segment
intersect point
return 1;
}
//===============================================================
====
//
Return: 0 = disjoint (no intersection)
//
1 = the two planes coincide
//
2 = intersection in the unique line *L
int
intersect3D_2Planes( Plane Pn1, Plane Pn2, Line* L )
{
Vector
u = Pn1.n * Pn2.n;
// cross product
float
ax = (u.x >= 0 ? u.x : -u.x);
float
ay = (u.y >= 0 ? u.y : -u.y);
float
az = (u.z >= 0 ? u.z : -u.z);
// test if the two planes are parallel
if ((ax+ay+az) < SMALL_NUM) {
//
parallel
// test if disjoint or coincide
Vector
v = Pn2.V0 - Pn1.V0;
if (dot(Pn1.n, v) == 0)
//
return 1;
//
else
return 0;
//
disjoint
}
with
case 1:
iP.x = 0;
iP.y = (d2*Pn1.n.z
iP.z = (d1*Pn2.n.y
break;
case 2:
iP.x = (d1*Pn2.n.z
iP.y = 0;
iP.z = (d2*Pn1.n.x
break;
case 3:
iP.x = (d2*Pn1.n.y
iP.y = (d1*Pn2.n.x
iP.z = 0;
}
L->P0 = iP;
L->P1 = iP + u;
return 2;
u.x;
u.x;
u.y;