轨迹绕圈算法_算法程序解决如下问题:质点在平面坐标系中运动,每次x或者y坐标增加或减少1,如何判断质点是否顺时针质点的轨迹我们是知道的,当我们已经知道质点在绕圈运动了,那么怎么判断它是在顺时...

优质解答

不知道你怎么获取质点坐标,所以我在程序中固定了点坐标,方便test,你主要看calOrder方法中如何判断是否顺时针吧.代码如下:

//质点类

public class Spot {

\x05int x;

\x05int y;

\x05

\x05Spot(int x,int y){

\x05\x05this.x = x;

\x05\x05this.y = y;

\x05}

}

public class TestSpot {

\x05public static void main(String[] args){

\x05\x05

\x05\x05/*给定的三个点坐标,是有顺序的.

\x05\x05 * 以(0,0),(0,1),(1,1),(1,0)(0,0)为例

\x05\x05 * p1 表示 质点运动的第一个点坐标,即(0,0)这点

\x05\x05 * p2 表示 质点运动的第二个点坐标,即(0,1)这点

\x05\x05 * p3 表示 质点运动的第三个点坐标,即(1,1)这点

\x05\x05 */

\x05\x05Spot p1 = new Spot(0,0);

\x05\x05Spot p2 = new Spot(0,1);

\x05\x05Spot p3 = new Spot(1,1);

\x05\x05

\x05\x05

\x05\x05TestSpot ts = new TestSpot();

\x05\x05//调用函数,这三个参数也是有顺序的,同上

\x05\x05System.out.print(ts.calOrder(p1,p2,p3));

\x05\x05

\x05}

\x05

\x05public int calXY(Spot p1,Spot p2){

\x05\x05

\x05\x05/*

\x05\x05 * 计算两个点之间x,y的位置变化

\x05\x05 *

\x05\x05 */

\x05\x05int x = p1.x - p2.x;

\x05\x05int y = p1.y - p2.y;

\x05\x05

\x05\x05if(x == 0){

\x05\x05\x05if(y < 0){

\x05\x05\x05\x05return -1;

\x05\x05\x05}else

\x05\x05\x05\x05return -2;

\x05\x05}else if(x < 0){

\x05\x05\x05return 2;

\x05\x05}else return 1;

\x05\x05

\x05\x05

\x05\x05

\x05}

\x05

\x05public String calOrder(Spot p1,Spot p2,Spot p3){

\x05\x05

\x05\x05/*

\x05\x05 * 计算是否顺时针

\x05\x05 */

\x05\x05

\x05\x05

\x05\x05//首先判断三个点间x,y的位置变化

\x05\x05int num1 = this.calXY(p1,p2);

\x05\x05int num2 = this.calXY(p2,p3);

\x05\x05

\x05\x05//然后根据所得判断

\x05\x05if(num1 < 0){

\x05\x05\x05if((num1+num2) == 0){

\x05\x05\x05\x05return "逆时针";

\x05\x05\x05}

\x05\x05\x05else return "顺时针";

\x05\x05}

\x05\x05

\x05\x05if(num1 > 0){

\x05\x05\x05if((num1 + num2) == 0){

\x05\x05\x05\x05return "顺时针";

\x05\x05\x05}

\x05\x05\x05else return "逆时针";

\x05\x05}

\x05\x05

\x05\x05return null;

\x05}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值