Comments on: Project 2: Decorated Initials https://ems.andrew.cmu.edu/2010spring/02/15/project-2-decorated-initial/ Carnegie Mellon University / Spring 2010 Mon, 10 May 2010 03:41:45 +0000 hourly 1 https://wordpress.org/?v=4.5.3 By: golan https://ems.andrew.cmu.edu/2010spring/02/15/project-2-decorated-initial/comment-page-1/#comment-83 Thu, 18 Feb 2010 20:10:45 +0000 https://ems.andrew.cmu.edu/2010spring/?p=2632#comment-83 Hi Nara, here are the class’s comments from the crit.
—————————————–

I love daily drop cap and i love the premise of your project! I definitely think you should pursue it for your final
I agree – Patrick

This is a great starting point & an interesting idea for this project. It stood out on the blog to me just b/c of your overall goal.. i just wish it had been executed better (you just need more time) -GFU I agree. The shapes are starting to get there, but obviously this is a very complex problem

It is possible to computationally synthesize these complex forms using recursive algorithms
Once you get it just right you can generate beautiful forms very easily and put the drop cap people out of business

You can get at the outline of a given type form using straight Java (inside Processing):

Font font = new Font(“sansserif”, Font.PLAIN, 9);
FontRenderContext fontRenderContext = new FontRenderContext(null, false, false);
GlyphVector gv = font.createGlyphVector(fontRenderContext, “hello world”);
Shape shp = gv.getOutline();

You can then get at the points themselves with shp.getPathIterator()
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Shape.html

More java code… to find the winding rule
/** Get the winding direction of a set of points
*
* @param points An array list of points on the perimeter
* @return True if the points are in a clockwise direction, else false
*/
private boolean getWinding(ArrayList points) {
float total = 0;
for (int i = 0; i < points.size(); i++) { Point2D.Float thisPoint = points.get(i); Point2D.Float prevPoint, nextPoint; int sizeMinusOne = points.size() - 1; if (i == 0) { prevPoint = points.get(sizeMinusOne); } else { prevPoint = points.get(i - 1); } if (i == sizeMinusOne) { nextPoint = points.get(0); } else { nextPoint = points.get(i + 1); } total += thisPoint.x * (nextPoint.y - prevPoint.y); } total /= 2; return (total > 0) ? true : false;

} –awesome!

pretty.

I’m working on a similar proj where vine and leaves grow on a curtain, feeding themselves light on the way… which might be a way to get them to distribute evenly…

OpenFrameworks connects to an OpenType library that provides type outline points.
Geomerative, good research.
Bit off more than you can chew — good work 🙂
Seems to need more local intelligence about the letterform, if not an actual growth algorithm.
GL

Nice applet you’ve built for yourself to test what’s working and what’s not. -SB

Maybe it would help to print out some letters and hand draw how you would like the plants to be generated. Then study you drawings to figure out why you put the plants where you did. (For example, growing out of the serifs) ]]>