Re: Triangle spiral (Was: Margin kerning, inter-sentence spacing and drawings)

Matej Nanut <[email protected]>
Newsgroups gmane.comp.type-setting.lout
Message-ID <CABTKRFwvtzy-5E-ZC1YuO_R8xEORmL5J2+jvktW9gS2-YqhTuw@mail.gmail.com>
Fascinating! Thank you for the quick reply, the solution and its explanation.

On 14 July 2012 01:39, Valeriy E. Ushakov <[email protected]> wrote:
> On Fri, Jul 13, 2012 at 17:41:22 +0200, Matej Nanut wrote:
>
>> 3. Is it possible to do something like this:
>> "http://www.texample.net/tikz/examples/rotated-triangle/" in Lout? The
>> first problem I come accross is how to implement addition (like +10)
>> cleanly.
>
> I guess the following quick hack would be a good start.  Adding color
> gradient is left as an exercise :)
>
> import @Geometry @Diag
> def @TriangleSpiral
>   right count
> {
>     # a bit of syntactic sugar
>     def @PointOn
>       named from {}
>       named to {}
>       named at {}
>     {
>         from ** { 1 - at } ++ to ** at
>     }
>
>     def @NestedTriangle
>       body @Body
>     {
>         @Node
>           outline {
>             # XXX: cannot define Pi directly because of shadowing (think
>             # LET* vs LET), so local P1 would shadow container's P1 and mess
>             # up location of local P3
>             MYP1:: @PointOn from { P1 } to { P2 } at { 0.85 }
>             MYP2:: @PointOn from { P2 } to { P3 } at { 0.85 }
>             MYP3:: @PointOn from { P3 } to { P1 } at { 0.85 }
>
>             # give them desired names
>             P1:: MYP1 P2:: MYP2 P3:: MYP3
>
>             # define the path
>             P1 P2 P3 P1
>           }
>           { @Body }
>     }
>
>     def @RepeatNestedTriangles
>       right i
>     {
>         @NestedTriangle {
>             i @Case {
>                 count @Yield @Null
>                 else  @Yield @RepeatNestedTriangles @Next i
>             }
>         }
>     }
>
>     @Polygon {
>       "12c" @Wide {} //0io
>
>       # we start at "2" b/c this initial polygon is "1"
>       @RepeatNestedTriangles 2
>     }
> }
>
>
> To test:
>
>   @Doc @Text @Begin
>   //4c
>   @Diag { @TriangleSpiral 15 }
>   @End @Text
>
>
> A bit of a wart here is that @Polygon produces a triangle that is
> actually smaller than the total object width, you can see it in the
> User's Guide example (Section 9.12 "Summary").  @Isosceles makes the
> base vertex of the right width, but you would need to compute the
> hight manually and add some retagging to provide Pi tags referred by
> the nested triangles.
>
> Also, the //4c gap in the test is to accomodate the parts of the outer
> triangle outside the object boundaries.  Again, @Isosceles should help
> with this.
>
> Note that "12c" needs to be quoted to avoid "c" from @Geometry.  More
> hygienic imports (only @PointOn needs @Geometry) should solve this.
>
> -uwe
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.