【主轴线】不规则多边形主轴线计算与显示

news2024/11/26 0:25:31

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

不规则多边形的主轴线 计算方法与显示方法

1. 正文

主轴线的计算与显示

首先,我们计算多边形的中心点,然后将顶点坐标相对于中心点进行平移,以便使多边形的中心点位于原点。接下来,我们计算协方差矩阵,并使用特征值分解得到特征向量和特征值。最后,我们选择具有最大特征值的特征向量作为主轴方向。

import numpy as np
import matplotlib.pyplot as plt

# # 定义不规则多边形的顶点坐标
vertices = [(1, 1), (3, 2), (5, 4), (4, 6), (2, 5)]
# 定义月牙形状多边形的顶点坐标
# vertices = [(1, 1), (2.5, 0), (4, 1), (4, 3), (2.5, 4), (1, 3)]
# vertices = [(1, 2), (3, 4), (5, 4), (7, 2), (6, 0), (2, 0)]
# vertices = [(2, 1), (4, 3), (6, 1), (5, 5), (3, 4)]

# 计算多边形的中心点
center = np.mean(vertices, axis=0)

# 将顶点坐标相对于中心点进行平移
translated_vertices = vertices - center

# 计算协方差矩阵
covariance_matrix = np.cov(translated_vertices.T)

# 使用特征值分解获取特征向量和特征值
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)

# 找到最大特征值对应的特征向量作为主轴方向
max_eigenvalue_index = np.argmax(eigenvalues)
main_axis_direction = eigenvectors[:, max_eigenvalue_index]

# 绘制不规则多边形
plt.figure()
polygon = plt.Polygon(vertices, fill=None, edgecolor='black')
plt.gca().add_patch(polygon)

# 绘制主轴方向
start_point = center - main_axis_direction * 10
end_point = center + main_axis_direction * 10
plt.plot([start_point[0], end_point[0]], [
         start_point[1], end_point[1]], color='red')

# 绘制中心点
plt.scatter(center[0], center[1], color='blue')

# 设置坐标轴范围
plt.xlim(min(translated_vertices[:, 0]) - 1,
         max(translated_vertices[:, 0]) + 1)
plt.ylim(min(translated_vertices[:, 1]) - 1,
         max(translated_vertices[:, 1]) + 1)

# 显示图形
plt.show()

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

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

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

相关文章

经典文献阅读之--DAMS-LIO(基于iEKF的轻量级LiDAR惯性里程计)

0. 简介 融合方案是多传感器融合方法的关键,多传感器融合方法是地下矿山和行星表面等复杂极端环境下状态估计的最有前途的解决方案。本文提出了一种基于iEKF的轻量级LiDAR惯性里程计系统,该系统采用可感知退化的模块化传感器融合管道,仅在检…

C语言小项目——通讯录高阶(文件管理版)

通讯录初阶: 点这里 通讯录中阶: 点这里 文件管理版本改进之处通讯录初始化退出通讯录并保存 完整代码contact.hcontact.ctest.c 文件管理版本改进之处 通讯录初始化 contact.c 退出通讯录并保存 test.c contact.c contact.h 完整代码 contact.h #pragma once#include&l…

缕析条分Scroll属性 | 京东云技术团队

最近有项目需要使用js原生开发滑动组件,频繁要用到dom元素的各种属性,其中以各种类型的height和top属性居多,名字相近,含义也很容易搞混。因此特地总结归纳了一下常用的知识点,在文末我们来挑战实现一个简易的移动端Sc…

Window下编译ffmpeg

Window下编译ffmpeg 下载MSYS2编译ffmpeg运行 下载MSYS2 MSYS2是一个是工具和库的集合,它能够方便的在windows上编译、安装和运行程序。ffmpeg可以通过这个软件来编译。 从MSYS2官网下载MSYS2并安装。 运行MSYS2终端,在终端中输入命令,安装…

JVM运行时数据区——Java虚拟机栈

每个线程在运行时都会创建一个Java虚拟机栈,也是线程私有的,其内部包含一个个的栈帧,先进后出,对应着一个个方法的调用,运行完则弹出,所以不存在垃圾回收的问题,如果线程所需要的栈深度大于此线…

什么是芯片组,南桥与北桥芯片的作用与区别

主板是连接计算机所有部件的PCB。在老式计算机中,所有芯片都分布在主板上。在现代计算机中,芯片数量减少并集中在特定位置。因此,将多个芯片组合起来形成一个芯片。这种可以替代大量芯片的芯片称为芯片组。主板上有一个芯片组。芯片组处理CPU…

docker在linux下简单部署项目

springboot项目docke部署 1.手动部署 1. 编写dockerfile文件 2. 将jar包和docker文件放到服务器上 执行mvn clean package docker:build 3.执行docker images查询是否存在镜像 4.启动方式放在下面写 2.通过gitlab ci/cd方式实现自动化部署 3.创建一个.gitlab-ci.yml 文件 3…

匿名内部类/Lambda Java和Kotlin谁会导致内存泄漏?

前言 内存泄漏是程序界永恒的话题,对于Android开发来说尤为重要,想让你的App表现得更优雅,了解并治理内存泄漏问题势在必行。 通过本篇文章,你将了解到: 何为内存泄漏?Android 常见内存泄漏场景Java匿名内部类会导致…

Vue3警告提示(Alert)

可自定义设置以下属性: 警告提示内容(message),类型:string | slot,默认:‘’警告提示的辅助性文字介绍(description),类型:string | slot&#…

14 - 堆栈 - 小顶堆

前面我们学习了线性结构的栈, 今天我们来学习一种非线性结构-堆 堆的定义 堆是一种非线性结构,可以把堆看作一棵二叉树, 堆的存储可以使用数组来存放! 堆的分类 堆可以分为大顶堆和小顶堆。 大顶堆: 每个结点的值都大于或等于其左右孩子结点的值。 小顶堆: 每个结点的值…

目标检测——yolo系列算法

目录 yolo算法yolo算法思想yolo的网络结构网络输入网络输出7x7网格30维向量 yolo模型的训练训练样本的构建损失函数模型训练 模型预测yolo总结 yoloV2预测更准确(better)batch normalization使用高分辨率图像微调分类模型采样Anchor Boxes聚类提取anchor尺度边框位置的预测细粒…

设计模式之单例模式的实现形式、弊端以及可替代的解决方案。

你好,我是爱养猫的程序员雪球,今天与你分享设计模式之单例模式。 单例模式是指一个类只允许创建一个对象(或实例)的模式。它在很多应用场景中具有重要作用,例如处理资源访问冲突(如日志文件写入&#xff09…

生信分析案例 Python简明教程 | 视频12

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在:https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

安徽华云安荣获合肥市大数据企业认定

日前,合肥市数据资源局公布了2023年度合肥市大数据企业认定名单,华云安子公司安徽华云安科技有限公司(以下简称安徽华云安)被成功认定为合肥市大数据企业。 据悉,合肥市大数据企业是合肥市为扶持和鼓励大数据企业发展&…

Android 自定义带箭头对话框背景

简介 自定义drawable,带箭头对话框背景,三角形矩形组合。应用于对话框背景、提示语背景等。 可设置箭头显示方向、箭头大小、箭头导圆角尺寸、矩形尺寸、矩形导圆角尺寸、背景颜色、drawable padding值(影响宿主控件padding)。 …

欧姆龙以太网模块如何设置ip连接 Kepware opc步骤

在数字化和自动化的今天,PLC在工业控制领域的作用日益重要。然而,PLC通讯口的有限资源成为了困扰工程师们的问题。为了解决这一问题,捷米特推出了JM-ETH-CP转以太网模块,让即插即用的以太网通讯成为可能,不仅有效利用了…

排序算法之冒泡排序详解-python版

冒泡排序:通过比较2个相邻元素之间的大小,交换元素顺序,从而达到排序目的。 从百度百科摘抄下来的冒泡排序原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作&#xf…

ComboBox基本用法

作用:是一个下拉框,用于以下拉列表的方式展示数据。 常用属性: 常用事件: 下拉列表框内容选择变化时触发 后台代码示范: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){//获取被选中的…

怎样优雅地增删查改(七):按用户查询

文章目录 实现使用测试 实现 定义按用户查询(IUserOrientedFilter)接口 public interface IUserOrientedFilter {public string EntityUserIdIdiom { get; }Guid? UserId { get; set; } }EntityUserIdIdiom:语义上的UserId,用于…

使用Pandas简化数据探索性分析

大家好,本文将探讨数据探索性分析的两个基本方面:数据集形状和空值。我们将深入了解Pandas如何简化这些任务,重点关注需要同时分析多个表格的情况。使用的库是pandas和tabulate。 数据集形状 要检索单个表格的形状,可以使用.sh…