Задача
9. Напишите класс для работы с геометрическими векторами на плоскости. Реализуйте максимально возможное количество методов.
Тесты
$latex x_1$ | $latex y_1$ | $latex x_2$ | $latex y_2$ | $latex x_3$ | $latex y_3$ | $latex x_4$ | $latex y_4$ | Ск. пр. | Угол |
4 | 4 | 61 | 12 | 44 | 65 | 21 | 51 | -1423 | 2.7342438697918836 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import java.util.*; import java.lang.Math.*; import java.io.*; class geomVector { public double x1,x2,y1,y2,xV,yV,xM,yM,vL; public void setVector(double a1,double b1, double a2, double b2) { x1 = a1; x2 = a2; y1 = b1; y2 = b2; } public void getVectorCoords() { xV = x2 - x1; yV = y2 - y1; } public void getMiddleCoords() { getVectorCoords(); xM = xV/2; yM = yV/2; } public void multiplyVector(double a) { x1*=a; x2*=a; y1*=a; y2*=a; getVectorCoords(); getMiddleCoords(); } public double getLength() { return vL = Math.sqrt(xV*xV+yV*yV); } public void vectorSum(geomVector a,geomVector b) { a.setVector(a.x1,a.y1,b.x2,b.y2); } public double scalMult(geomVector a,geomVector b) { return (a.xV*b.xV+a.yV*b.yV); } public double getAngle(geomVector a, geomVector b) { return Math.acos(scalMult(a,b)/(a.getLength()*b.getLength())); } } public class Main { public static void main(String[] args) { double x1,x2,x3,x4,y1,y2,y3,y4; Scanner in = new Scanner(System.in); x1 = in.nextDouble(); x2 = in.nextDouble(); x3 = in.nextDouble(); x4 = in.nextDouble(); y1 = in.nextDouble(); y2 = in.nextDouble(); y3 = in.nextDouble(); y4 = in.nextDouble(); geomVector a = new geomVector(); geomVector b = new geomVector(); a.setVector(x1,y1,x2,y2); b.setVector(x3,y3,x4,y4); a.getVectorCoords(); b.getVectorCoords(); System.out.println(b.scalMult(b,a)); System.out.println(a.getAngle(a,b)); } } |
Описание решения
Переменные $latex x_1,y_1,x_2,y_2$ являются координатами начала и конца вектора, $latex x_V$ и $latex y_V$ — координаты вектора, $latex x_M$ и $latex y_M$ — координаты середины вектора, $latex v_L$ — длина вектора. Реализованы методы для нахождения середины вектора, длины вектора, умножения вектора на число, сложения векторов, скалярного произведения векторов и нахождения угла между векторами.
Код можно просмотреть на сайте ideone
— Добавьте ключевые слова. Только сначала разберитесь, что это такое.
— Откуда взято задание? Дайте ссылку.