## Sunday, 28 August 2016

### Chapter 8 Exercise 7, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

*8.7 (Points nearest to each other) Listing 8.3 gives a program that finds two points in a two-dimensional space nearest to each other. Revise the program so that it finds two points in a three-dimensional space nearest to each other. Use a two-dimensional array to represent the points. Test the program using the following points:
double[][] points = {{-1, 0, 3}, {-1, -1, -1}, {4, 1, 1}, {2, 0.5, 9}, {3.5, 2, -1}, {3, 1.5, 3}, {-1.5, 4, 2}, {5.5, 4, -0.5}};

The formula for computing the distance between two points (x1, y1, z1) and (x2, y2, z2) is

import java.util.Scanner;

public class ProgramingEx8_7 {
public static void main(String[] args) {

double[][] points = {{-1, 0, 3}, {-1, -1, -1}, {4, 1, 1},
{2, 0.5, 9}, {3.5, 2, -1}, {3, 1.5, 3}, {-1.5, 4, 2},
{5.5, 4, -0.5}};

// p1 and p2 are the indices in the points array
int p1 = 0, p2 = 1; // Initial two points
double shortestDistance = distance(points[p1][0], points[p1][1],
points[p1][2], points[p2][0], points[p2][1], points[p2][2]); // Initialize
// shortestDistance

// Compute distance for every two points
for (int i = 0; i < points.length; i++) {
for (int j = i + 1; j < points.length; j++) {
double distance = distance(points[i][0], points[i][1],
points[i][2], points[j][0], points[j][1], points[j][2]); // Find distance //26.05.16 Correction made from comments below

if (shortestDistance > distance) {
p1 = i; // Update p1
p2 = j; // Update p2
shortestDistance = distance; // Update shortestDistance
}
}
}

// Display result
System.out.println("The closest two points are " + "(" + points[p1][0]
+ ", " + points[p1][1] + ", " + points[p1][2] + ") and (" + points[p2][0] + ", "
+ points[p2][1] + ", " + points[p2][2]+ ")");
}

/** Compute the distance between two points (x1, y1) and (x2, y2) */
public static double distance(double x1, double y1, double z1, double x2, double y2, double z2) {
return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)+ (z2 - z1) * (z2 - z1));
}
}