zoukankan      html  css  js  c++  java
  • 已知线段上某点与起点的距离,求该点的坐标

    1. 概述

    在实际进行空间几何计算的时候,很难确定直线的方向向量,一般都是知道线段的起点(O)和终点(E)。那么显然方向向量为(D=E-O)。这时,根据射线的向量方程,线段上某一点P为:

    [P=O+tD ]

    很显然,这个t值就确定了线段上(P)的位置。在方向向量由起止点确定,且点在线段内的情况下,t的取值范围为0到1:取值为0时就是起点(O),取值为1时就是终点(E)。进一步,根据相似三角形原则,如果知道(P)点与起点(O)的距离为d,则t的取值为:

    [t = frac{d}{Mod(D)} ]

    其中Mod(D)是向量的模,也就是线段的长度。

    2. 实现

    具体的C++实现代码如下:

    #include <iostream>
    
    using namespace std;
    
    // 2D Point
    struct Vector2d
    {
    public:
    	Vector2d()
    	{
    	}
    
    	Vector2d(double dx, double dy)
    	{
    		x = dx;
    		y = dy;
    	}
    
    	// 矢量赋值
    	void set(double dx, double dy)
    	{
    		x = dx;
    		y = dy;
    	}
    
    	// 矢量相加
    	Vector2d operator + (const Vector2d& v) const
    	{
    		return Vector2d(x + v.x, y + v.y);
    	}
    
    	// 矢量相减
    	Vector2d operator - (const Vector2d& v) const
    	{
    		return Vector2d(x - v.x, y - v.y);
    	}
    
    	//矢量数乘
    	Vector2d Scalar(double c) const
    	{
    		return Vector2d(c*x, c*y);
    	}
    
    	// 矢量点积
    	double Dot(const Vector2d& v) const
    	{
    		return x * v.x + y * v.y;
    	}
    
    	//向量的模
    	double Mod() const
    	{
    		return sqrt(x * x + y * y);
    	}
    
    	double x, y;
    };
    
    void CalPointFromLineWithDistance(const Vector2d & O, const Vector2d & E, double d, Vector2d& P)
    {
    	Vector2d D = E - O;	
    	double t = d / D.Mod();
    	P = O + D.Scalar(t);
    }
    
    int main()
    {
    	Vector2d O(1.0, 2.4);
    	Vector2d E(10.2, 11.5);
    	double d = 5;
    	Vector2d P;
    
    	CalPointFromLineWithDistance(O, E, d, P);
    	cout << "计算的点为:" << P.x<<'	' << P.y << '
    '; 
    
    	cout << "验算距离是否为"<<d<<":" <<(P-O).Mod()<< '
    ';
    }
    

    运行结果如下所示:

    求线上的点

  • 相关阅读:
    spring boot welcome-file-list
    spring boot web.xml listener
    Linkflow CDP
    连接数据,构建中台,Linkflow如何推动数据化浪潮 CDP
    客户全生命周期服务解决方案的提供商。
    自然语言处理的发展历史 发展方向 行业(法律)
    SpringBoot 设置 profiles 并在其他配置文件里面读取 pom.xml
    SpringBoot 配置文件无法解析占位符
    微服务 SaaS 低代码开发平台
    混沌工程与分布式系统
  • 原文地址:https://www.cnblogs.com/charlee44/p/12416079.html
Copyright © 2011-2022 走看看