# [OpenJDK 2D-Dev] X11 uniform scaled wide lines and dashed lines; STROKE_CONTROL in Pisces

Denis Lila dlila at redhat.com
Thu Oct 21 12:27:03 PDT 2010

```Hi Jim.

> When one talks about curves and being parallel, my mind
> tends to think of the tangents of the curves being parallel and
> tangents are directed by the first derivative.

That's what I was trying to express. The tangents of curves A and B
at t are parallel if and only if there's some c such that A'(t) = c*B'(t),
which is what I defined || to mean, although perhaps I didn't make this
clear enough.

> Also, if you are going to use your definition of "vector" then
> parallel is an odd term to use

I agree. I was never comfortable with using "parallel" but I couldn't
find a better word. How about "aligned"?

Anyway, I've changed the comments to something that hopefully will
avoid this sort of confusion in the future.

Other than this, I think I've followed all your other suggestions
(putting some of the degenerate curve handling in separate functions,
fixing the style issues, removing unused methods, etc).
I also fixed a bug in Renderer.edgeSetCurY where I was using
edges[idx+MINY] instead of edges[idx+CURY] (which produced visible
artifacts on nearly horizontal lines). I am also now using your
TransformingPathConsumer2D class, which simplified things quite a bit
where ever it was used.

Good to push?

http://icedtea.classpath.org/~dlila/webrevs/noflatten2/webrev/

Regards,
Denis.

----- "Jim Graham" <james.graham at oracle.com> wrote:

> OK, I can see how your terminology works now, but it seems odd to me.
> I
> never consider re-expressing the coordinates on a curve as a vector
> and
> basing geometric properties on those constructed vectors.  I either
> consider the points on the curve, or its tangent or its normal - none
> of
> which is the value you are expressing.  You are, essentially,
> operating
> on tangent vectors, but you aren't calling them that, you are calling
>
> them something like "the vector of the derivative" which is a relative
>
> (direction only) version of the tangent vector (which has location and
>
> direction).
> for values that originate from the same point
> (points considered as a vector are taken to originate from 0,0) -
> really
> you want those "vectors" to be collinear, not (just) parallel.
>
> So, either || means "the coordinates of the curves expressed as
> vectors
> are collinear" or it means "the curves (i.e. the tangents of the curve
>
> at the indicated point) are parallel".  Saying "vector I() is parallel
>
> to vector B()" didn't really have meaning to me based on the above
> biases.
>
> So, I get your comment now and all of the math makes sense, but the
> terminology seemed foreign to me...
>
> 			...jim
>
> On 10/20/10 10:48 AM, Denis Lila wrote:
> >> Also, how is A(t) and B(t) are parallel not the same as "the curves
> A
> >> and B are parallel at t"?
> >
> > Well, suppose A and B are lines with endpoints (0,0), (2,0) for A
> > and (0,1),(2,1) for B. Obviously, for all t, A and B are parallel at
> t.
> > However let t = 0.5. Then A(t) = (1,0) and B(t) = (1, 1). The
> vectors
> > (1,0) and (1,1) are not parallel, so saying A(t) || B(t) is the
> same
> > as saying that there exists c such that (1,0) = c*(1,1), which isn't
> true.
> >
> > However, A'(t)=(2,0) and B'(t)=(2,0), and the vectors
> > (2,0) and (2,0) are parallel.
> >
> > Does this make more sense?
> >
> > Regards,
> > Denis.
> >
> > ----- "Jim Graham"<james.graham at oracle.com>  wrote:
> >
> >> On 10/20/10 7:54 AM, Denis Lila wrote:
> >>>> In #2, you have a bunch of "I'() || B'()" which I read as "the
> >> slope
> >>>> of the derivative (i.e. acceleration) is equal", don't you
> really
> >> mean
> >>>> "I() || B()" which would mean the original curves should be
> >> parallel?
> >>>> Otherwise you could say "I'() == B'()", but I think you want to
> >> show
> >>>> parallels because that shows how you can use the dxy1,dxy4
> values
> >> as
> >>>> the parallel equivalents.
> >>>
> >>> Not really. I've updated the comment explaining what || does, and
> >>> it should be clearer now. Basically, A(t) || B(t) means that
> >> vectors
> >>> A(t) and B(t) are parallel (i.e. A(t) = c*B(t), for some nonzero
> >> t),
> >>> not that curves A and B are parallel at t.
> >>
> >> I'm not sure we are on the same page here.
> >>
> >> I'() is usually the symbol indicating the "derivative" of I().  My
> >> issue
> >> is not with the || operator, but with the fact that you are
> applying
> >> it
> >> to the I'() instead of I().
> >>
> >> Also, A(t) = c*B(t) is always true for all A and B and all t if
> you
> >> take
> >> a sample in isolation.  Parallel means something like "A(t) =
> c*B(t)
> >> with the same value of c for some interval around t", not that the
> >> values at t can be expressed as a multiple.
> >>
> >> Again, I'() || B'() says to me that the derivative curves are
> >> parallel,
> >> not that the original curves are parallel...
> >>
> >> 			...jim

```