zoukankan      html  css  js  c++  java
  • 第六章第三十九题(几何:点的位置)(Geometry: point position)

    6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧,或在该直线上。使用下面的方法头编写该方法:

    public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)

    public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)

    public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)

    编写一个程序,提示用户输入三个点赋给p0、p1和p2,显示p2是否在从p0到p1的直线的左侧、右侧、直线上,或者线段上。

    下面是一些运行示例:

    Enter three points for p0, p1, and p2: 1 1 2 2 1.5 1.5

    (1.5, 1.5) is on the line segment from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 3 3

    (3.0, 3.0) is on the same line from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 1 1.5

    (1.0, 1.5) is on the left side of the line from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 1 –1

    (1.0, −1.0) is on the right side of the line from (1.0, 1.0) to (2.0, 2.0)

    6.39(Geometry: point position) Programming Exercise 3.32 shows how to test whether a point is on the left side of a directed line, on the right, or on the same line. Write the methods with the following headers:

    public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)

    public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)

    public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)

    Write a program that prompts the user to enter the three points for p0, p1, and p2and displays whether p2 is on the left side of the line from p0 to p1, right side, the same line, or on the line segment.

    Here are some sample runs:

    Enter three points for p0, p1, and p2: 1 1 2 2 1.5 1.5

    (1.5, 1.5) is on the line segment from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 3 3

    (3.0, 3.0) is on the same line from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 1 1.5

    (1.0, 1.5) is on the left side of the line from (1.0, 1.0) to (2.0, 2.0)

    Enter three points for p0, p1, and p2: 1 1 2 2 1 –1

    (1.0, −1.0) is on the right side of the line from (1.0, 1.0) to (2.0, 2.0)

    下面是参考答案代码:

    // https://cn.fankuiba.com
    import java.util.Scanner;
    
    public class Ans6_39_page205 {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.print("Enter three points for p0, p1, and p2:");
            double x0 = input.nextDouble();
            double y0 = input.nextDouble();
            double x1 = input.nextDouble();
            double y1 = input.nextDouble();
            double x2 = input.nextDouble();
            double y2 = input.nextDouble();
    
            if (onTheSameLine(x0, y0, x1, y1, x2, y2)) {
                if (onTheLineSegment(x0, y0, x1, y1, x2, y2)) {
                    System.out.printf("(%.1f, %.1f) is on the line segment from "
                            + "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
                } else {
                    System.out.printf("(%.1f, %.1f) is on the same line from "
                            + "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
                }
            } else {
                if (leftOfTheLine(x0, y0, x1, y1, x2, y2)) {
                    System.out.printf("(%.1f, %.1f) is on the left side of the line from "
                            + "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
                } else {
                    System.out.printf("(%.1f, %.1f) is on the right side of the line from "
                            + "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
                }
            }
        }
    
        public static boolean leftOfTheLine(double x0, double y0,
                                            double x1, double y1, double x2, double y2) {
            if ((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) > 0)
                return true;
            else
                return false;
        }
    
        public static boolean onTheSameLine(double x0, double y0,
                                            double x1, double y1, double x2, double y2) {
            return (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) == 0;
        }
    
        public static boolean onTheLineSegment(double x0, double y0,
                                               double x1, double y1, double x2, double y2) {
            if ((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) == 0 &&
                    x2 <= (Math.max(x0, x1)) && x2 >= (Math.min(x1, x0)))
                return true;
            else
                return false;
        }
    }
    
    

    适用Java语言程序设计与数据结构(基础篇)(原书第11版)Java语言程序设计(基础篇)(原书第10/11版)

    发布在博客:(https://cn.fankuiba.com)

  • 相关阅读:
    问题:C# params类型参数;结果:C#的参数类型:params、out和ref
    问题:ExecuteNonQuery 与 ExecuteScalar 结果: ExecuteNonQuery方法和ExecuteScalar方法的区别
    问题:MSChart.exe;结果:微软图表控件MsChart使用方法及各种插件下载地址
    问题:部署到iis上后Chart图片不显示;结果:使用webchart过程中遇到的一些问题
    问题:C#发布的项目浏览时出现“Server Application Unavailable”错误;结果:Server Application Unavailable出现的原因及解决方案小结
    问题:oracle nvl;结果:Oracle中的NVL函数
    cookie的路径和域
    Spring MVC静态资源处理
    java.lang.ClassNotFoundException的解决方法
    ThreadLocal管理登录信息
  • 原文地址:https://www.cnblogs.com/in2013/p/13097190.html
Copyright © 2011-2022 走看看