python矢量算法-三角形变化寻找对应点

news2024/11/13 14:57:50

1.算法需求描述

现有随机生成的两个三角形A与B,在三角形A中存在Pa,使用算法计算出三角形B中对应的点Pb

2.python代码

import numpy as np  
  
# 计算三角形A的面积  
def area_triangle(vertices):  
    return 0.5 * np.abs(np.dot(vertices[0] - vertices[1], vertices[1] - vertices[2]))  
  
# 计算重心坐标  
def barycentric_coordinates(P, vertices):  
    v0 = vertices[1] - vertices[0]  
    v1 = vertices[2] - vertices[0]  
    v2 = P - vertices[0]  
      
    d00 = np.dot(v0, v0)  
    d01 = np.dot(v0, v1)  
    d11 = np.dot(v1, v1)  
    d20 = np.dot(v2, v0)  
    d21 = np.dot(v2, v1)  
      
    denom = d00 * d11 - d01 * d01  
    v = (d11 * d20 - d01 * d21) / denom  
    w = (d00 * d21 - d01 * d20) / denom  
    u = 1.0 - v - w  
      
    return np.array([u, v, w])  
def generate_random_triangle():
    # 随机生成三个点作为三角形的顶点
    vertices = np.random.rand(3, 2)  # 生成三个点,每个点有两个坐标值
    return vertices
def generate_random_point_in_triangle(triangle):
    # 生成两个随机数
    r1, r2 = np.random.rand(2)

    # 通过重心坐标法生成点
    sqrt_r1 = np.sqrt(r1)
    u = 1 - sqrt_r1
    v = r2 * sqrt_r1
    w = 1 - u - v

    # 计算点的坐标
    point = u * triangle[0] + v * triangle[1] + w * triangle[2]

    return point
import matplotlib.pyplot as plt

# 定义三角形的三个顶点坐标  
source_A = generate_random_triangle()
target_B = generate_random_triangle()

# 定义点P在三角形A内的坐标  
PA = generate_random_point_in_triangle(source_A) 

# 计算点P在三角形A中的重心坐标  
PA_coords = barycentric_coordinates(PA, source_A)  
  
# 使用重心坐标在三角形B中找到对应的点Pt  
PB = PA_coords[0] * target_B[0] + PA_coords[1] * target_B[1] + PA_coords[2] * target_B[2]  
  
print("Pt的坐标是:", PB)


# 绘制图形
plt.figure(figsize=(8, 6))

# 绘制A_arr构成的平面
plt.fill([point[0] for point in source_A], [point[1] for point in source_A], color='blue', alpha=0.2, label='A_arr Plane')

# 绘制B_arr中的点
plt.fill([point[0] for point in target_B], [point[1] for point in target_B], color='red', label='B_arr Points')

# 绘制source_P和target_P
plt.scatter(PA[0], PA[1], color='green', marker='o', label='Source Point')
plt.scatter(PB[0], PB[1], color='orange', marker='o', label='Target Point')

# 标记顶点顺序
for i, point in enumerate(source_A):
    plt.text(point[0], point[1], str(i + 1), fontsize=12, color='black', ha='right', va='bottom')
    
for i, point in enumerate(target_B):
    plt.text(point[0], point[1], str(i + 1), fontsize=12, color='black', ha='right', va='bottom')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('Visualization of Points and Plane')
plt.legend()
plt.grid(True)
plt.show()

3.计算结果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1537106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人机交互三原则,网络7层和对应的设备、公钥私钥

人机交互三原则 heo Mandel提出了人机交互的三个黄金原则,它们强调了相似的设计目标,分别是: 简单总结为:控负持面–>空腹吃面 1,用户控制 2,减轻负担 3,保持界面一致 置用户于控制之下&a…

3新 IT 技术深刻变革,驱动实体经济进入智能化时代

技术进步和创新是实体经济转型升级的内生 源动力,是企业数字化转型的核心工具,有 助于“降本增效提质”目标的达成。自 20 世 纪 90 年代至今,我国快速完成信息化的大规 模建设,典型数字化技术已发展成熟并充分 融合进企业日…

ARMday7

VID_20240322_203313 1.思维导图 2.main.c #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf(&q…

Go语言学习04~05 函数和面向对象编程

Go语言学习04-函数 函数是一等公民 <font color"Blue">与其他主要编程语言的差异</font> 可以有多个返回值所有参数都是值传递: slice, map, channel 会有传引用的错觉函数可以作为变量的值函数可以作为参数和返回值 学习函数式编程 可变参数 func s…

Java代码基础算法练习-递归求数-2024.03.22

任务描述&#xff1a; 利用递归函数调用方式&#xff0c;将所输入的5个字符&#xff0c;以相反顺序打印出来。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;/*** m240322类&#xff0c;提供了一个反转输入字符串前5个字符的…

MySQL数据库概念及MySQL的安装

文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能&#xff08;数据库与外界对接&#xff0…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…

博途PLC 模拟量批量转换FC(PEEK指令应用)

单通道模拟转换FC S_ITR请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/121347697https://rxxw-control.blog.csdn.net/article/details/121347697模拟量输出FC S_RTI https://rxxw-control.blog.csdn.net/article/details/121394943

python+requests接口自动化测试实战

环境说明&#xff1a; 1.WIN 7, 64位 2.Python3.4.3 &#xff08;pip-8.1.2&#xff09; 3.Requests —>pip install requests 4.Unittest —>unittest 框架是python自带的单元测试框架&#xff0c;python2.1及其以后的版本已将unittest作为一个标准块放入python开发包中…

java目标和(力扣Leetcode106)

目标和 力扣原题 问题描述 给定一个正整数数组 nums 和一个整数 target&#xff0c;向数组中的每个整数前添加 ‘’ 或 ‘-’&#xff0c;然后串联起所有整数&#xff0c;可以构造一个表达式。返回可以通过上述方法构造的、运算结果等于 target 的不同表达式的数目。 示例 …

Linux:执行命令的命令eval与Bash解析命令的方式

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 eval命令用于接收参数&#xff0c;并将这些参数作为一行命令执行&#xff0c;这也许会使人困惑&#xff0c;为什么我不能直接执行命令而需要使用eval命令间接执行呢&…

海内外媒体发稿助力中国品牌扬帆“出海”

在“走出去”国家战略的指引下&#xff0c;借着加入世贸的东风&#xff0c;越来越多中国企业扬帆出海&#xff0c;在学习中融入&#xff0c;在融入中超越&#xff0c;在波折中发展&#xff0c;在发展中共赢。《财富》&#xff15;&#xff10;&#xff10;强企业排行榜上&#…

网工内推 | 数通工程师,IE认证优先,五险一金,绩效奖

01 星网信通 招聘岗位&#xff1a;数通产品经理 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

鸿蒙开发案例:【图像加载缓存库ImageKnife】

专门为OpenHarmony打造的一款图像加载缓存库&#xff0c;致力于更高效、更轻便、更简单。 简介 OpenHarmony的自研版本&#xff1a; 支持内存缓存&#xff0c;使用LRUCache算法&#xff0c;对图片数据进行内存缓存。支持磁盘缓存&#xff0c;对于下载图片会保存一份至磁盘当…

第十四届蓝桥杯JavaB组省赛真题 - 阶乘求和

/ 10^9考虑前九位&#xff0c;% 10^9保留后9位 解题思路: 求获取结果的后九位数字&#xff0c;需要对10^9取余&#xff0c;因为202320232023这个数字的阶乘太大&#xff0c;必须要减少计算量&#xff0c;因为当一个整数乘以10^9后对其取余&#xff0c;那么结果都为0。 所以我…

掌握C语言结构体,开启编程新世界

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 前言 前面我们也涉及到了结构体的讲解&#xff0c;但是只是粗略的讲了一下。 接下…

网络编程:包头分析

一、以太网头 以太网中封装了源mac地址以及目的mac地址&#xff0c;还有ip类型&#xff0c;以太网又称为mac头 0X0800 只接收发往本机的mac的ipv4类型的数据帧 0X0806 只接收发往本机的ARP类型的数据帧 0x8035 只接受发往本机的RARP类型的数据帧 0X0003 接收发往本机的MAC所…

田路分离数据的

因为农机大部分时间是在田地工作&#xff0c;所以大多数农机轨迹样本存在数据分布不平衡的问题&#xff0c;既田地数据多&#xff0c;道路数据少。因为用于分类的大多数机器学习算法都是围绕每个类别的样本数量均相等的假设来设计的。这导致模型的预测性能较差&#xff0c;特别…

Angular进阶之八: Angular Animation在项目中的实践经验

使用 Angular 进行项目开发的程序员应该都很熟悉 Angular Animation。这是一个 Angular 原生的动画库&#xff0c;它可以替代或者辅助完成原本需要使用 css 的动画功能。 Angular 在国内的运用是很有限的&#xff0c;可借鉴的文档并不很丰富。尤其对于 Angular 动画模块的应用…

[数据结构]堆

一、堆是什么&#xff1f; 堆是一种完全二叉树 完全二叉树的定义&#xff1a;完全二叉树的形式是指除了最后一层之外&#xff0c;其他所有层的结点都是满的&#xff0c;而最后一层的所有结点都靠左边。​​​​​​&#xff0c;从左到右连续。 教材上定义如下: 若设二叉树的…