MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Distance problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16355] Re: [mg16256] Distance problem
  • From: BobHanlon at aol.com
  • Date: Thu, 11 Mar 1999 02:16:35 -0500
  • Sender: owner-wri-mathgroup at wolfram.com

>Mietta Lennes wrote:
> 
> I need to draw a figure picturing the relative interdistances of a limited
> set of labeled points. The distance of each point to every other point is
> known. On the basis of this information, is there a way to draw a 2- or
> 3-dimensional "map" where each point's location (coordinates) corresponds
> to its distance to other points? On which terms is this possible?
> 
> Is there a computer program that can at least approximate this?
> 
> I am writing a paper in which this kind of figures would be most useful
> and enlightening... but I need the information fast. Please mail any
> possible answers straight to me.
>

Mietta,

The distance between two points is given by

dist[x_, y_] := Sqrt[Plus @@ ((x-y)^2)] /; 
		Length[x] == Length[y]

To be able to display the results, the points are assumed to be 
two-dimensional

pts = Table[{Random[], Random[]}, {10}];

You need to define a metric, here I use the average distance of 
a point from all of its neighbors

avgDist =((Plus @@ #)/(Length[pts]-1))& /@ 
    Table[dist[pts[[k]], #]& /@ pts, {k, Length[pts]}];

Using the average distance as the z coordinate

ptsDist = Partition[Flatten[Transpose[{pts, avgDist}]], 3];

Needs["Graphics`Graphics3D`"];

Plotting the two-dimensional points

ListPlot[pts, PlotRange -> {{0, 1}, {0, 1}}, 
  PlotStyle -> AbsolutePointSize[3]];

Using the average distance as the z coordinate

ScatterPlot3D[ptsDist, PlotRange -> {{0, 1}, {0, 1}, Automatic}, 
  PlotStyle -> AbsolutePointSize[3]];

Ordering points by increasing average distance (z coordinate) 
and joining the plot

ScatterPlot3D[Sort[ptsDist, #1[[3]] < #2[[3]]&], 
	PlotRange -> {{0, 1}, {0, 1}, Automatic}, 
	PlotStyle -> {RGBColor[1, 0, 0], AbsoluteThickness[2]}, 
	PlotJoined -> True, 
	ViewPoint -> {1.5, -2.4, 1.}];

You will need to play with the ViewPoint to get the best viewing 
angle for a given set of points.

As expected, points near the center of the points have smaller 
average distance than those out at the edges.

Bob Hanlon


  • Prev by Date: Urgent aid needed
  • Next by Date: Making large movies
  • Previous by thread: Re: Distance problem
  • Next by thread: Evaluating UnitStep inside another function