日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求任意一个点到任意函数曲线或曲线方程(参数方程)上最近距离点的通用方法,含Matlab实现代码

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求任意一个点到任意函数曲线或曲线方程(参数方程)上最近距离点的通用方法,含Matlab实现代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題提出

假如曲線外有一個點,如果這個曲線是直線,求這個點到直線的距離最近的點,則比較好求,直接作垂直線,再求交點即可。但是,如果這個曲線不是直線,而是一個任意彎曲的函數曲線甚至是一個參數方程形式的曲線,該如何求解呢?

二、解決方案

1、對于求一個點到任意函數曲線這種情況,我是通過搜索法實現的。設有函數曲線外有一個點,現在以為圓心,半徑依次為(半徑線性遞增或指數遞增等)畫圓,直到畫出的圓能夠與函數曲線相交。判斷圓與曲線是否相交的方法如下:如畫一個半徑為的圓,則對應的范圍為,通過對進行0.01的細分,求出每個細分點的,當出現細分點到的距離小于所畫的半徑時,則認為圓內已經含有最近的點了,此時的必有個細分點到的距離為最小,我們可以認為此細分點即是所求。下圖形象的表示出了實現原理。

?

2、對于一個點到任意曲線方程最近點的方法,也可以通過搜索法實現。但是曲線方程與函數不同,函數是y關于x的函數,只需要通過搜索x即可找到最近點。但是曲線方程或者說參數方程,它的x,y都是關于第三個參數的函數,假如給定一個點,求它到曲線最近距離的點。此時提出兩種方法。?

第一種方法,總體仍然仿照上述函數曲線的方法進行搜索,直到找到最近的點。首先求解當曲線上點為或為時,參數t對應的值,然后以為起始點進行上下搜索,現在假設第一次設定搜索半徑為0.1,通過對進行上下搜索,確定對應的的范圍,然后仿照函數曲線的方法依次進行搜索即可。需要注意的是,所求或對應的,它們代表的是橫向搜索或縱向搜索,假如求出的是兩個或兩個以上的值,則需要同時分別對所求的所有值使用上述方法搜索,哪個先圈到圓內,則是哪個點,如果有兩個以上的t同時圈到圓內,則距離最近的那個點就是所求的點。這種方法實際上是有局限性的,局限性一,如果的取值范圍不確定,而曲線方程本身所取到的x,y值被限定在了一定的范圍內,假如此時距離曲線方程本身的點較遠,這種方法就可能失效。局限性二,需要求求或對應的值,有的時候不是很好求解。

第二種方法是,假如已經知道距離最近的點所對應值的范圍,則可以直接按一定精度細分,然后通過搜索法求距離最短的即可,該方法比較簡單,不再贅述。

三、Matlab代碼實現

求函數曲線外一點(-1.0,-1.5)到函數曲線最短距離的點。按照第二節第一部分所述的方法,其Matlab實現代碼如下:

clear; clc close all K=0.15; plan_x=-10:0.001:10; plan_y=K*plan_x.*plan_x; figure(1) plot(plan_x,plan_y);real_loc_x=-1.0; real_loc_y=-1.5; cycles_count=1; subdivision_scope=0.1; subdivision_degree=0.01; subdivision_x_value=0.0; point_center_min_distance=99999.0; point_center_x_min_value=0.0; while point_center_min_distance>subdivision_scope*cycles_count for subdivision_x_value=(real_loc_x-cycles_count*subdivision_scope):subdivision_degree:(real_loc_x+cycles_count*subdivision_scope);point_center_distance=sqrt((subdivision_x_value-real_loc_x)^2+(K*subdivision_x_value^2-real_loc_y)^2);if point_center_distance<point_center_min_distancepoint_center_min_distance=point_center_distance;point_center_x_min_value=subdivision_x_value;end endcycles_count=cycles_count+1; end dis_min_xy_buf(1)=point_center_x_min_value; dis_min_xy_buf(2)=K*dis_min_xy_buf(1)^2; hold on plot(dis_min_xy_buf(1),dis_min_xy_buf(2),'b.','MarkerSize',10); plot(real_loc_x,real_loc_y,'r.','MarkerSize',10);

?運行結果如下:

?所得的結果為[-0.68,0.06936],在為0.01的精度范圍內是可信的。

?

?

?

?

總結

以上是生活随笔為你收集整理的求任意一个点到任意函数曲线或曲线方程(参数方程)上最近距离点的通用方法,含Matlab实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。