Vectors show length and direction

Tuesday, November 18th, 2008 | examples

Vectors do not have a location. That means you can start them from anywhere and they’ll still travel the same length and direction regardless. The following example demonstrates by using random starting points, but placing planes and lines along the same vector from those different starting points.

View example
source

package {
 
	import org.papervision3d.core.geom.Lines3D;
	import org.papervision3d.core.geom.renderables.Line3D;
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.special.LineMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class VectorsShowLengthAndDirection extends BasicView
	{
		private const NUM_POINTS:int = 50;
		private const NUM_STARTING_POINTS:int = 20;
 
		public function VectorsShowLengthAndDirection()
		{
			var pointA:Number3D = new Number3D(-1000, -800, 500);
			var pointB:Number3D = new Number3D(12000, 8000, 20000);
 
			var vector:Number3D = Number3D.sub(pointB, pointA);
			var vectorCopy:Number3D = new Number3D();
 
			for(var i:int = 0; i < NUM_STARTING_POINTS; i++)
			{
				//create a random starting point
				var startingPoint:Number3D = new Number3D(Math.random() * 2000 - 1000, Math.random() * 2000 - 1000, Math.random() * 2000 );
				var randColor:Number = Math.random() * 0xffffff;
				var lines:Lines3D = new Lines3D();
				var lineMaterial:LineMaterial = new LineMaterial(randColor);
				for(var j:int = 0; j < NUM_POINTS; j++)
				{
					vectorCopy.copyFrom(vector);
					var pointAlongVector:DisplayObject3D = new Plane(new ColorMaterial(randColor), 100, 100);
					vectorCopy.multiplyEq(j/NUM_POINTS);
					//use the startingPoint as the first position
					pointAlongVector.position = Number3D.add(startingPoint, vectorCopy);
					scene.addChild(pointAlongVector);
				}	
				var line:Line3D = new Line3D(lines, lineMaterial, 5, 
					new Vertex3D(startingPoint.x, startingPoint.y, startingPoint.z),
					new Vertex3D(pointAlongVector.x, pointAlongVector.y, pointAlongVector.z));
 
				lines.addLine(line);
				scene.addChild(lines);
			}
 
			singleRender();
		}
	}
}

Tags: , ,

  • Erdem
    Hi!

    I'm trying to calculate 3D position of a mouse click position by detected marker's plane. Is there any easy way to find 3D postion on the marker's plane? I've tried to intersect 2D position with marker's plane. I can get the ray vector fo the mouse click position by flarCamera3D's unproject method. I also can get the marker's 3D position. But I need to find the normal vector of the marker's plane. So I can build a plane3D with setNormalAndPoint method. Then I can intersect the ray with this plane and the result will be the 3D position of the 2D mouse position.My codes are here:var ray:Number3D = flarCamera3D.unproject(mouse.x,mouse.y);var p:Plane3D = new Plane3D();var normal: Number3D = I DONT KNOW HOW TO FIND??p.setNormalAndPoint(normal, markerPosition);var intersect:Number3D = p.getIntersectionLineNumbers(flarCamera3D.position, ray);
blog comments powered by Disqus

Search

Recommended Books

Speaking at FITC Toronto

 

November 2008
M T W T F S S
    Dec »
 12
3456789
10111213141516
17181920212223
24252627282930

Preferred Video Tutorial Resolution

  • 1024x768 (53%, 85 Votes)
  • 1280x1024 (15%, 24 Votes)
  • 1920x1080 (15%, 24 Votes)
  • 800x600 (13%, 20 Votes)
  • 480x320 (4%, 6 Votes)
  • 640x480 (0%, 2 Votes)

Total Voters: 160

Loading ... Loading ...