算法程序解决如下问题:质点在平面坐标系中运动,每次x或者y坐标增加或减少1,如何判断质点是否顺时针质点的轨迹我们是知道的,当我们已经知道质点在绕圈运动了,那么怎么判断它是在顺时
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/14 12:11:30
![算法程序解决如下问题:质点在平面坐标系中运动,每次x或者y坐标增加或减少1,如何判断质点是否顺时针质点的轨迹我们是知道的,当我们已经知道质点在绕圈运动了,那么怎么判断它是在顺时](/uploads/image/z/11971864-64-4.jpg?t=%E7%AE%97%E6%B3%95%E7%A8%8B%E5%BA%8F%E8%A7%A3%E5%86%B3%E5%A6%82%E4%B8%8B%E9%97%AE%E9%A2%98%EF%BC%9A%E8%B4%A8%E7%82%B9%E5%9C%A8%E5%B9%B3%E9%9D%A2%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%AD%E8%BF%90%E5%8A%A8%2C%E6%AF%8F%E6%AC%A1x%E6%88%96%E8%80%85y%E5%9D%90%E6%A0%87%E5%A2%9E%E5%8A%A0%E6%88%96%E5%87%8F%E5%B0%911%2C%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E8%B4%A8%E7%82%B9%E6%98%AF%E5%90%A6%E9%A1%BA%E6%97%B6%E9%92%88%E8%B4%A8%E7%82%B9%E7%9A%84%E8%BD%A8%E8%BF%B9%E6%88%91%E4%BB%AC%E6%98%AF%E7%9F%A5%E9%81%93%E7%9A%84%2C%E5%BD%93%E6%88%91%E4%BB%AC%E5%B7%B2%E7%BB%8F%E7%9F%A5%E9%81%93%E8%B4%A8%E7%82%B9%E5%9C%A8%E7%BB%95%E5%9C%88%E8%BF%90%E5%8A%A8%E4%BA%86%2C%E9%82%A3%E4%B9%88%E6%80%8E%E4%B9%88%E5%88%A4%E6%96%AD%E5%AE%83%E6%98%AF%E5%9C%A8%E9%A1%BA%E6%97%B6)
算法程序解决如下问题:质点在平面坐标系中运动,每次x或者y坐标增加或减少1,如何判断质点是否顺时针质点的轨迹我们是知道的,当我们已经知道质点在绕圈运动了,那么怎么判断它是在顺时
算法程序解决如下问题:质点在平面坐标系中运动,每次x或者y坐标增加或减少1,如何判断质点是否顺时针
质点的轨迹我们是知道的,当我们已经知道质点在绕圈运动了,那么怎么判断它是在顺时针还是逆时针运动呢?
比如(0,0),(0,1),(1,1),(1,0)(0,0),这个轨迹是顺时针的运动.但是这个圈可能会非常复杂.
算法程序解决如下问题:质点在平面坐标系中运动,每次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}
}