识别点周围的三角形点

发布于 2024-10-30 13:38:58 字数 376 浏览 2 评论 0原文

我在 .NET 中开发了一个绘制线条的应用程序。 在一条线的中间,我需要绘制线方向数组。

有:
(xA, yA, xB, yB)(pA, pB) - 线段 AB
arrWidth, arrHeight - 箭头尺寸;
<代码>> B - 箭头方向。

需要:
3 个新点 pArr1、pArr2、pArr3 - 方向箭头的点,应位于线段 AB 的中间。

在此处输入图像描述

I develop in .NET an application that draws some lines.
In the middle of a line I need to draw the line direction array.

Have:
(xA, yA, xB, yB) or (pA, pB) - segment AB points
arrWidth, arrHeight - arrow dimensions;
> B - arrow direction.

Need:
3 new points pArr1, pArr2, pArr3 - points of the directional arrow, that should be situated in the middle of the segment AB.

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青衫儰鉨ミ守葔 2024-11-06 13:38:58

首先我会做一些定义。

让:

  • p = 到线尾的位置向量
  • v = 线向量
  • h = 箭头高度
  • w = 箭头宽度
  • L = 逆时针旋转 90 度

那么你的三个点是:

  1. p + (|v|/2 - h/2 + w/2 L) v/|v|
  2. p + (|v|/2 - h/2 - w/2 L) v/|v|
  3. p + (|v|/2 + h/2) v/|v|

其中 v/|v|是沿线的单位向量。

在二维中,L 只是映射 (x, y) => (-y, x)

更明确地说,使用问题中的变量,上述各点可以用 C# 编写为:

// assuming xA, yA, xB, yB, arrWidth, arrHeight are initialised
var xV = xB - xA;
var yV = yB - yA;
var v = Math.Sqrt(xV*xV + yV*yV);
var pArr1 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) - yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) + xV * arrWidth / (2 * v) };
var pArr2 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) + yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) - xV * arrWidth / (2 * v) };
var pArr3 = new[] {
    xA + xV / 2 + xV * arrHeight / (2 * v),
    yA + yV / 2 + yV * arrHeight / (2 * v) };

First I'll make some definitions.

let:

  • p = position vector to tail of line
  • v = the line vector
  • h = the arrow height
  • w = the arrow width
  • L = the anti-clockwise rotation by 90 degrees

Then your three points are:

  1. p + (|v|/2 - h/2 + w/2 L) v/|v|
  2. p + (|v|/2 - h/2 - w/2 L) v/|v|
  3. p + (|v|/2 + h/2) v/|v|

Where v/|v| is the unit vector along your line.

In 2 dimensions L is just the mapping (x, y) => (-y, x)

To be more explicit, using the variables in the question, the points above could be written in C# as:

// assuming xA, yA, xB, yB, arrWidth, arrHeight are initialised
var xV = xB - xA;
var yV = yB - yA;
var v = Math.Sqrt(xV*xV + yV*yV);
var pArr1 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) - yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) + xV * arrWidth / (2 * v) };
var pArr2 = new[] {
    xA + xV / 2 - xV * arrHeight / (2 * v) + yV * arrWidth / (2 * v),
    yA + yV / 2 - yV * arrHeight / (2 * v) - xV * arrWidth / (2 * v) };
var pArr3 = new[] {
    xA + xV / 2 + xV * arrHeight / (2 * v),
    yA + yV / 2 + yV * arrHeight / (2 * v) };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文