组合类实例

输入:第一行四个浮点数,分别是起始顶点和对角顶点的坐标x1 y1 x2 y2。然后是不定个数的变换,每个变换一行,每行第一个数据是字符,'T’表示平移,'S’表示对称。如果是平移,后面的数据为两个整数,分别表示X方向和Y方向的平移量;如果是对称,后面是一个整数:0表示以原点为参照求对称点,1 表示以X轴为参照求对称点,2表示以Y轴为参照求对称点。数据中间用空格分隔。所有数据均为整数。
参见样例:
输入:
1 2 4 6
T 2 3
S 1
S 2
S 0
T 4 5
输出:
(7,10)(10,14) 12

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		float x1, x2, y1, y2;
		x1 = in.nextFloat();
		y1 = in.nextFloat();
		x2 = in.nextFloat();
		y2 = in.nextFloat();
		char m;
		Rectangle A = new Rectangle(x1, x2, y1, y2);
		Point p1 = new Point(x1, y1);
		Point p2 = new Point(x2, y2);
		while (in.hasNext()) {
			m = in.next().charAt(0);
			if (m == 'T') {
				float a, b;
				a = in.nextFloat();
				b = in.nextFloat();
				p1.move(a, b);
				p2.move(a, b);

			}
			if (m == 'S') {
				int c;
				c = in.nextInt();
				if (c == 0) {
					A.change0(x1, x2, y1, y2);
				}
				if (c == 1) {
					A.change1(y1, y2);
				}
				if (c == 2) {
					A.change2(x1, x2);
				}
			}

		}
		p1.shuchu();
		p2.shuchu();
		A.area();
	}

}

class Point {
	private float x, y;

	public Point(float x, float y) {
		this.x = x;
		this.y = y;
	}

	public Point(Point p) {
		x = p.x;
		y = p.y;
	}

	public void move(float a, float b) {
		x += a;
		y += b;
	}

	public void shuchu() {
		System.out.printf("(%.0f,%.0f)", x, y);

	}
}

class Rectangle {
	private float x1, x2, y1, y2;
	private Point p1, p2;

	public Rectangle(float x1, float x2, float y1, float y2) {
		this.x1 = x1;
		this.x2 = x2;
		this.y1 = y1;
		this.y2 = y2;
		p1 = new Point(x1, y1);
		p2 = new Point(x2, y2);
	}

	public void change0(float x1, float x2, float y1, float y2) {
		x1 = -x1;
		x2 = -x2;
		y1 = -y1;
		y2 = -y2;
	}

	public void change1(float y1, float y2) {
		y1 = -y1;
		y2 = -y2;
	}

	public void change2(float x1, float x2) {
		x1 = -x1;
		x2 = -x2;
	}

	public void area() {
		System.out.print(" " + (int) (x2 - x1) * (int) (y2 - y1));
	}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不关我事~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值