Вектор , отрезок через класс Vector

  • Автор темы Yunnii
  • Дата начала
Y

Yunnii

#1
Создание отрезка через вектор, тока мы дописали эту задачу так у нас потребовали осуществление через класс Vector. Как делать? Подскажите
Отрезок

Код:
package immutableClasses;
import java.io.*;


public class Segment {


final Vector v1=new Vector();
final Vector v2=new Vector();
public Segment(double x1, double y1, double z1,double x2, double y2, double z2) {		
v1.x=x1;
v1.y=y1;
v1.z=z1;
v2.x=x2;
v2.y=y2;
v2.z=z2;		
}

public double distance(double x1, double y1, double z1){
final Vector a=new Vector();
final Vector b=new Vector();
final Vector c=new Vector();
double p=0;
a.x=v1.x-v2.x;
a.y=v1.y-v2.y;
a.z=v1.z-v2.z;

b.x=v1.x-x1;
b.y=v1.y-y1;
b.z=v1.z-z1;

c.x=x1-v2.x;
c.y=y1-v2.y;
c.z=z1-v2.z;

double a_d=a.dlina(a);

double b_d=b.dlina(b);
double c_d=c.dlina(c);


System.out.println("координаты отрезка:"+a.x+' '+a.y+' '+a.z);	
p=(a_d+b_d+c_d)/2;
double rasst=0;
if(a.Ugol(b)<0)
{
System.out.println("расстояние от точки до прямой:"+b_d);
return b_d;				
}
if(a.Ugol(c)<0)
{
System.out.println("расстояние от точки до прямой:"+c_d);
return c_d;				
}
if(a_d!=0 && (b_d+c_d)!=a_d)
{
rasst=(2*Math.sqrt(p*(p-a_d)*(p-b_d)*(p-c_d)))/a_d;
}
System.out.println("расстояние от точки до прямой:"+rasst);
return rasst;		
}

public static String readLine() 
{
try 
{
return new BufferedReader(
new InputStreamReader(System.in)).readLine();
} 
catch (IOException e) 
{
return new String();
}
}

public static void main (String[] args)
{

//		

final Vector a1=new Vector();
final Vector a2=new Vector();
Vector c=new Vector();
int count=0;

System.out.println("Введите координаты векторов:");
String str = readLine();

double number = new Double(str).intValue();
a1.x=number;
str = readLine();
number = new Double(str).intValue();
a1.y=number;
str = readLine();
number = new Double(str).intValue();
a1.z=number;
str = readLine();
number = new Double(str).intValue();
a2.x=number;
str = readLine();
number = new Double(str).intValue();
// number = new Integer(str).intValue();
a2.y=number;
str = readLine();
number = new Double(str).intValue();
a2.z=number;

c=a1.summa(a2);
//	System.out.println("сума:"+ c.x);
//	System.out.println("скалярное произведение:"+a1.skal_pr(a2));

//	final Segment n=new Segment(a1.x,a1.y,a1.z,a2.x,a2.y,a2.z);

//n.distance(1,2,4);

}

}
Вектор
Код:
package immutableClasses;
import java.io.*;

class Vector {
double x; double y; double z;
Vector()
{
x=0;
y=0;
z=0;
}
Vector(double ax, double ay, double az){
x=ax;
y=ay;
z=az;
}


@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Vector other = (Vector) obj;
if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
return false;
if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
return false;
if (Double.doubleToLongBits(z) != Double.doubleToLongBits(other.z))
return false;
return true;
}
double dlina(Vector a)
{	
return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z);

}
Vector summa(Vector b)
{
Vector c=new Vector();
c.x=x+b.x;
c.y=y+b.y;
c.z=z+b.z;
return c;
}
Vector raznost( Vector b)
{
Vector c=new Vector();
c.x=x-b.x;
c.y=y-b.y;
c.z=z-b.z;
return c;
}
Vector umn_na_skal(Vector a, double b)
{
Vector c=new Vector();
c.x=a.x*b;
c.y=a.y*b;
c.z=a.z*b;
return c;
}
double skal_pr(Vector b)
{
double c=x*b.x+y*b.y+z*b.z;
return c;
}
Vector Vekt_pr(Vector v2)
{
Vector result = new Vector();
result.x = y * v2.z - z * v2.y;
result.y = z * v2.x - x * v2.z;
result.z = x * v2.y - y * v2.x;
return result; 
}
double Ugol(Vector b)
{
double c=(x*b.x+y*b.y+z*b.z)/(Math.sqrt(x*x+y*y+z*z)*Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z));
return c;
}

}
Тест
Код:
package immutableClasses;
import java.io.*;

import junit.framework.TestCase;

public class SegmentTest extends TestCase {
// ТЕСТ: Точка лежит на отрезке 
public void testPointOnSegment() {
check(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
check(0, 0, 0, 1, 1, 1, 0, 0, 0, 0);
check(0, 0, 0, 2, 4, 8, 1, 2, 4, 0);
check(0, 0, 0, 1, 2, 0, 1, 2, 0, 0);
check(10, -1, 2, 0, 1, 4, 5, 0, 3, 0);
}

// ТЕСТ: Проекция точки на отрезок совпадает с одним из концов отрезка 
public void testPointUnderEnd(){
check(0, 0, 0, 1, 0, 0, 0, 1, 0, 1);
check(-1, 0, 0, 1, 0, 0, -1, 1, 0, 1);
check(-1, 0, 0, 1, 0, 0, 1, 0, 10.1, 10.1);		
}

// ТЕСТ: Проекция точки на отрезок лежит внутри отрезка 
public void testPointUnderSegment(){
check(0, 0, 0, 10, 0, 0, 3, 12, 0, 12);
check(-1, 0, 0, 1, 0, 0, 0, 3, 4, 5);
check(-1, -1, 0, 2, 2, 0, 1, 1, 4, 4);	
}

// ТЕСТ: Проекция точки на отрезок лежит вне отрезка 
public void testPointNotUnderSegment(){
check(0, 0, 0, 10, 0, 0, 13, 4, 0, 5);
check(0, 0, 0, 10, 0, 0, -3, -4, 0, 5);
}

public void check(double x1, double y1, double z1, double x2, double y2,
double z2, double x, double y, double z, double expectedDistance) {
Segment s = new Segment(x1, y1, z1, x2, y2, z2);
assertEquals(expectedDistance, s.distance(x, y, z), 0.000001);
}

public void testSum(){
Vector v1=new Vector(0,1,0);
Vector v2=new Vector(0,0,1);
Vector v3=new Vector(0,1,1);
assertTrue(v3.equals(v1.summa(v2)));
}
public void testRaz(){
Vector v1=new Vector(0,1,0);
Vector v2=new Vector(0,0,1);
Vector v3=new Vector(0,1,-1);
assertTrue(v3.equals(v1.raznost(v2)));
}
public void testSP(){
Vector v1=new Vector(4,1,3);
Vector v2=new Vector(0,2,1);
double c=5;
assertTrue(c==v1.skal_pr(v2));
}
public void testVP(){
Vector v1=new Vector(0,1,0);
Vector v2=new Vector(0,0,1);
Vector v3=new Vector(1,0,0);
assertTrue(v3.equals(v1.Vekt_pr(v2)));
}	
public void testSc(){
Vector v1=new Vector(1,4,-2);
double c=3;
Vector v3=new Vector(3,12,-6);
assertTrue(v3.equals(v1.umn_na_skal(v1,c)));
}
}
 
Y

Yunnii

#3
фишка в том что я не знаю как это сделать через встроенный класс vector и как замутить тестыю хотя бы приблизетельно понятькак это сделать.. :)