Ok, i'm not sure how to explain it correctly, hopefully it makes sens. What i'm trying to achieve is link 2 points but with an organic curve. I can link two points in AS3 without any problem but i'm looking for a cooler graphical way (a bit like nurbs curves for the 3d enthusiasts out there) instead of a straight line.
I have found an answer in here about cubic hermite spline which linked to http://wonderfl.net/c/pTgv , the things is, i don't know the control points, all i know is the coordinates of my two points and as my points are draggable, they can change at anytime.
So the question is, is there any algorithm out there to have an organic curve between two points ??
Related
I have this interesting challenge in my work, i have shape files of road networks, and another shape-File containing area boundaries, is there any tool that i can use to get length of roads that lies inside each polygon?
I have access to both QGIS and ArcGIS.
This is probably better asked on gis stackoverflow.
That said, this is a multi-stage problem. I'd suggest something like:
Clip the roads layer by the polygon layer, keeping the polygon id for each road.
Measure the length of the now-clipped roads.
Sum up the road lengths, grouping by the polygon_id
Join the now-measured,-summed-and-clipped roads layer back to the polygon layer.
This will give you what you want.
If you don't know how to use QGIS/ArcGIS, try googling for tutorials (or get work to splurge on training). There are plenty that cover the above functions.
Or do I have to get down and dirty with the math and do the spline intersection math myself? I know the basic math for Quadratic b-splines.
I'm trying to make procedural randomly generated Celtic knot-work that animates itself. I'm inspired by the book of Kells original book -and the animation of the same name. This means at best it will be seriously complicated - lots of curves animating fast. I'm going for generative -responsive to the user- Celtic knots of the highest possible complexity.... that may mean only 12 points animating randomly and in response to mouse movements but... I'd love hundreds or tens of thousands... some day.
Developing a moving random curvy double lined loop scribble was easy. I like the look of the curves made from 12 to 14 random points. Now I want to weave it over under over under. To do that -- I need to find the intersections of lots of random curves quickly for each frame. When I draw curves in Flash in the -not object- drawing mode... Flash does intersections and generates points automatically for me.
Questions:
-Is there an equivalent intersection class/method/function in Actionscript 3.0 to the intersections so easily done in the flash drawing interface?
-How much of what you do in Flash as an artist has cool classes like curveTo in Actionscript 3.0?
-Can I see the source code for curveTo?
-Can I extend the curveTo to do what I want?
-I have been reading and re-reading the reference and how to extend classes... that I made. But how to I learn how to extend curveTo ... or Path classes... can I?
Would this be something that you are looking for:
http://actionsnippet.com/?p=965
See a demo here: http://www.actionsnippet.com/swfs/bezier_intersect.html
Let's say I use the Graphics class at runtime to draw some vector shapes dynamically. For example a square and a circle.
Is there a way to create a new shape at runtime where those 2 vectors shapes overlap?
Those kind of operations are very common in all vector design programs such as Illustrator, Corel, etc... but I haven't found anything in Adobe's documentation, nor anywhere else, to do it by code.
Although drawing operations on the Graphics class are described in terms of lines, points etc this is - as far as you're concerned - just telling it what to draw onto a bitmap. There's no way to remove a shape once drawn, short of clear(), which just wipes the whole thing clean.
I don't fully understand why, as the vector data must be retained - there's no loss of quality on scaling after drawing, for example.
If you don't want to get into some hardcore maths (for anything beyond straight lines, you'll need to) there's an answer here which might help if you've ever used PixelBender:
How to calculate intersection between shapes in flash / action script ? (access to shape's segments and nodes?)
Failing that, if it's just cosmetic you could play around with masking shapes (will probably end up quite hacky though) - however, if you actually want to use the intersection to draw or describe a shape you will need to dig out your maths book or look for a good graphics library.
Hope this helps
I've got a continuous plane (2-D) containing polygonal obstacles. I am uniformly sampling the plane at discrete positions to create a uniform grid of points. The grid does not have points where obstacles lie (i.e. holes where ever an obstacle is) as shown in the image below.
(Please view the image at http://i48.tinypic.com/2efnblg.png for a clear idea of what I'm attempting to accomplish. I couldn't embed it.)
Can anyone point me to some good implementations with optimal worst-case time-complexity?
Solved the problem using recursion.
I have a similar problem to this post. I need to display up to 1000 polygons on an embedded Google map. The polygons are in a SQL database, and I can render each one as a single KML file on the fly using a custom HttpHandler (in ASP.NET), like this http://alpha.foresttransparency.org/concession.1.kml .
Even on my (very fast) development machine, it takes a while to load up even a couple dozen shapes. So two questions, really:
What would be a good strategy for rendering these as markers instead of overlays once I'm beyond a certain zoom level?
Is there a publicly available algorithm for simplifying a polygon (reducing the number of points) so that I'm not showing more points than make sense at a certain zoom level?
For your second question: you need the Douglas-Peucker Generalization Algorithm
For your first question, could you calculate the area of a particular polygon, and relate each zoom level to a particular minimum area, so as you zoom in or out polygon's disappear and markers appear depending on the zoom level.
For the second question, I'd use Mark Bessey's suggestion.
I don't know much aobut KML, but I think the usual solution to question #2 involves iterating over the points, and deleting any line segments under a certain size. This will cause some "unfortunate" effects in some cases, but it's relatively fast and easy to do.
I would recommend 2 things:
- Calculate and combine polygons that are touching. This involves a LOT of processing and hard math, but I've done it so I know it's possible.
- Create your own overlay instead of using KML in PNG format, while you combine them in the previous suggestion. You'll have to create a LOT of PNGs but it is blazing fast on the client.
Good luck :)
I needed a solution to your #2 question a little bit ago and after looking at a few of the available line-simplification algorithms, I created my own.
The process is simple and it seems to work well, though it can be a bit slow if you don't implement it correctly:
P[0..n] is your array of points
Let T[n] be defined as the triangle formed by points P[n-1], P[n], P[n+1]
Max is the number of points you are trying to reduce this line to.
Calculate the area of every possible triangle T[1..n-1] in the set.
Choose the triangle T[i] with the smallest area
Remove the point P[i] to essentially flatten the triangle
Recalculate the area of the affected triangles T[n-1], T[n+1]
Go To Step #2 if the number of points > Max