Java黑皮书课后题第8章:*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积
生活随笔
收集整理的這篇文章主要介紹了
Java黑皮书课后题第8章:*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
*8.33(幾何:多邊形的子面積)一個(gè)具有四個(gè)頂點(diǎn)的凸多邊形被分為4個(gè)三角形,編寫一個(gè)程序,提示用戶輸入4個(gè)頂點(diǎn)的坐標(biāo),然后以升序顯示四個(gè)三角形的面積
- 題目
- 題目描述與運(yùn)行示例
- 破題
- 代碼
題目
題目描述與運(yùn)行示例
8.33(幾何:多邊形的子面積)一個(gè)具有四個(gè)頂點(diǎn)的凸多邊形被分為4個(gè)三角形,編寫一個(gè)程序,提示用戶輸入4個(gè)頂點(diǎn)的坐標(biāo),然后以升序顯示四個(gè)三角形的面積
博主補(bǔ)充:
a00 * x + a01 * y = b0
a10 * x + a11 * y = b1
則:
x = (b0 * a11 - b1 * a01) / (a00 * a11 - a01 * a10)
y = (b1 * a00 - b0 * a10) / (a00 * a11 - a01 * a10)
三角形面積公式:
s = (side1 + side2 + side3) / 2
area = Math.sqrt(s(s-side1)(s-side2)(s-side3))
運(yùn)行示例:
破題
代碼
import java.util.Arrays; import java.util.Scanner;public class Test8_33 {public static void main(String[] args) {//1. 獲取四個(gè)點(diǎn)的坐標(biāo),使用數(shù)組讀入double[][] array = new double[4][2];Scanner input = new Scanner(System.in);System.out.println("Enter x1, y1, x2, y2, x3, y3, x4, y4:");for (int i = 0 ; i < 4 ; i++){for (int j = 0 ; j < 2 ; j++){array[i][j] = input.nextDouble();}}//2. 求v1v3和v2v4線的交點(diǎn)坐標(biāo)double[] loc = intersection(array);//3. 自定義方法求三角形面積(傳入數(shù)組、下標(biāo)、交點(diǎn)坐標(biāo)數(shù)組),使用數(shù)組接收double[] area = new double[4];for (int i = 0 ; i < 4 ; i++){area[i] = triangle(array, i, loc);}//4. 對(duì)數(shù)組排序,輸出Arrays.sort(area);System.out.print("The areas are ");for (int i = 0 ; i < 4 ; i++){System.out.printf("%.2f ", area[i]);}}/** 求v1v3和v2v4線的交點(diǎn)坐標(biāo) */public static double[] intersection(double[][] arr){double k02 = (arr[2][1] -arr[0][1]) / (arr[2][0] - arr[0][0]);double k13 = (arr[3][1] -arr[1][1]) / (arr[3][0] - arr[1][0]);double b02 = arr[0][1] - k02 * arr[0][0];double b13 = arr[1][1] - k13 * arr[1][0];double x = (b02 - b13) / (k13 - k02);double y = (b02 * k13 - b13 * k02) / (k13 - k02);double[] feedback = {x, y};return feedback;}/** 求三角形面積 */public static double triangle(double[][] arr0, int index0, double[] arr1){int index1 = (index0 + 1) % 4;double side1 = Math.sqrt(Math.pow(arr0[index1][0] - arr0[index0][0], 2) + Math.pow(arr0[index1][1] - arr0[index0][1], 2));double side2 = Math.sqrt(Math.pow(arr1[0] - arr0[index0][0], 2) + Math.pow(arr1[1] - arr0[index0][1], 2));double side3 = Math.sqrt(Math.pow(arr1[0] - arr0[index1][0], 2) + Math.pow(arr1[1] - arr0[index1][1], 2));double s = (side1 + side2 + side3) / 2;return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));} }總結(jié)
以上是生活随笔為你收集整理的Java黑皮书课后题第8章:*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java黑皮书课后题第8章:*8.32(
- 下一篇: Java黑皮书课后题第8章:*8.34(