[vtkusers] Distance between points

David Gobbi david.gobbi at gmail.com
Tue Jan 14 18:48:08 EST 2014


Hi Matias,

I don't use Activiz, but something about your code confuses me:
In C++, Distance2BetweenPoints is overloaded for float and double:

  float Distance2BetweenPoints(const float x[3], const float y[3])
  double Distance2BetweenPoints(const double x[3], const double y[3])

So how does Activiz know which one of these methods to call?
If it passes a "double" IntPtr to the float-overloaded method, then the
result is definitely going to be wrong.

Also: I suggest that you include "Activiz" or "C#" in the subject line
of all your emails to the list.  That will help to attract the attention of
other Activis users, and they are the ones who are most likely to know
the answers to questions like this one.

  David




On Tue, Jan 14, 2014 at 4:18 PM, Matias Montroull <matimontg at gmail.com> wrote:
> Hi,
>
> I'm running this code and I get distance "infinity"... If I change to lower
> values (1 digit) then it gives a distance..
> Why?
>
>  double[] p0 = new double[] { 10.2, 20.7, 10.4 };
>    double[] p1 = new double[] { 10.5, 20.5, 10.8};
>
>    IntPtr pP0 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);
>    IntPtr pP1 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);
>    Marshal.Copy(p0, 0, pP0, 3);
>    Marshal.Copy(p1, 0, pP1, 3);
>
>    // Find the squared distance between the points.
>    double squaredDistance = vtkMath.Distance2BetweenPoints(pP0, pP1);
>
>    // Take the square root to get the Euclidean distance between the points.
>    double distance = Math.Sqrt(squaredDistance);
>
>    // Output the results.
>    Console.WriteLine("SquaredDistance = " + squaredDistance);
>    Console.WriteLine("Distance = " + distance);
>    Marshal.FreeHGlobal(pP0);
>    Marshal.FreeHGlobal(pP1);


More information about the vtkusers mailing list