1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Java", создана пользователем Yunnii, 14 окт 2008.

  1. Yunnii

    Yunnii Гость

    Репутация:
    0
    Создание отрезка через вектор, тока мы дописали эту задачу так у нас потребовали осуществление через класс 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)));
    }
    }
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    так в чем собственно вопрос?
     
  3. Yunnii

    Yunnii Гость

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

Поделиться этой страницей