当前位置: 首页 > 知识库问答 >
问题:

android - 在二维平面上,有一点p(x,y),有一个三角形ABC,顶点坐标为A(x1,y1),B(x2,y2),C(x3,y3),如何判断点P是否在三角形内或在三角形的边上?

宇文学博
2023-09-12

在空间中,有两条线段,分别是线段AB和线段CD,它们的顶点坐标分别是A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3);D(x4,y4,z4),请问如何求线段AB与线段CD的交点坐标?

共有1个答案

张炳
2023-09-12

问题一:

public class GeometryUtils {    public static void main(String[] args) {        System.out.println(isPointInTriangle(1, 1, 0, 0, 2, 0, 0, 2, 1, 1));        System.out.println(findLineSegmentsIntersection(0, 0, 0, 1, 1, 0, 1, 1, 0));    }    public static boolean isPointInTriangle(double px, double py, double ax, double ay, double bx, double by, double cx, double cy) {        double sABC = Math.abs(ax * by + bx * cy + cx * ay - ax * cy - bx * ay - cx * by) / 2.0;        double sPAB = Math.abs(px * ay + ax * by + bx * py - ax * py - px * by - bx * ay) / 2.0;        double sPAC = Math.abs(px * ay + ax * cy + cx * py - ax * py - px * cy - cx * ay) / 2.0;        double sPBC = Math.abs(px * by + bx * cy + cx * py - bx * py - px * cy - cx * by) / 2.0;        return Math.abs(sPAB + sPAC + sPBC - sABC) < 1e-6;    }    // ... }

交点坐标

    public static double[] findLineSegmentsIntersection(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4) {        double[] result = new double[3];        double t = ((x3 - x1) * (x4 - x3) + (y3 - y1) * (y4 - y3) + (z3 - z1) * (z4 - z3)) /                   ((x2 - x1) * (x4 - x3) + (y2 - y1) * (y4 - y3) + (z2 - z1) * (z4 - z3));        double s = ((x1 - x3) + (x2 - x1) * t) / (x4 - x3);        if (t >= 0 && t <= 1 && s >= 0 && s <= 1) {            result[0] = x1 + t * (x2 - x1);            result[1] = y1 + t * (y2 - y1);            result[2] = z1 + t * (z2 - z1);            return result;        } else {            return null; // 线段无交点        }    }}
 类似资料:
  • 本文向大家介绍给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码相关面试题,主要包含被问及给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码时的应答技巧和注意事项,需要的朋友参考一下 根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:   /** *

  • Returns an angle between two or three points Parameters x1numberx coord of first point y1numbery coord of first point x2numberx coord of second point y2numbery coord of second point x3numberx coord of

  • 问题内容: 您好,我也有4个点,而我将有4个三角形,如何检查每个点的这四个三角形,无论该点是否在三角形内。谢谢 问题答案: 实现接口,该接口提供了几种方法。这是一个简单的例子。

  • 问题内容: 嗨,我正在尝试创建仿射变换,使我可以将一个三角形变换为另一个三角形。我所拥有的是2个三角形的坐标。你能帮助我吗? 按照亚当·罗森菲尔德的回答,我想出了这段代码,以防万一有人无聊地自己解决方程: 问题答案: 我假设您在这里谈论2D。仿射变换矩阵中有9个值: 有3个顶点输入,和,当其转化应该成为,,。然而,由于我们在齐次坐标的工作,应用到不一定给-它给人的倍数。所以,我们也有未知的乘法器,

  • 本文向大家介绍python 打印直角三角形,等边三角形,菱形,正方形的代码,包括了python 打印直角三角形,等边三角形,菱形,正方形的代码的使用技巧和注意事项,需要的朋友参考一下 三角形 等腰直角三角形1 2.7 python:打印直角三角形 coding=utf-8 方式一 方式二 #打印实心等边三角形 #打印菱形 #实心正方形 #空心正方形 知识点说明: python ,end=''备注

  • 我有一个多边形的顶点列表,我试图在一个较大的三角形内创建一个等边三角形网格,以输入多边形的当前顶点为中心。 内部三角形边的大小由确定,它将容器边划分为相等的部分。最后,我想在Python的列表中存储所有这些三角形(包括原来的大三角形)顶点的坐标。 我提出的一个方法是: null