精华内容
下载资源
问答
  • Visual LISP 提取多段线坐标的基本代码,可参考后改进
  • 今天小编就为大家分享一篇python绘制已知坐标的直线实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 地图已知两点坐标画一条曲线

    千次阅读 2019-08-10 10:25:05
    开发中遇到了这个问题,Leaflet没有点画曲线的方法,只能自己求出曲线的坐标点组,再画了,废话不说,直接贴代码: calcCoorArr=(point_start,point_end,num)=>{// 入参两个坐标(字符串格式:"114.30911...

    开发中遇到了这个问题,Leaflet没有用两点画曲线的方法,只能自己求出曲线的坐标点组,再画了,废话不多说,直接贴代码:

    // 入参两个坐标(字符串格式:"114.30911,30.600052"),num是返回坐标点个数
    calcCoorArr=(point_start,point_end,num)=>{
      //第一步把坐标字符串转为对象,为了方便计算转为了数字格式
      var p_start={x:parseFloat(point_start.split(",")[0]), y:parseFloat(point_start.split(",")[1])};
      var p_end={x:parseFloat(point_end.split(",")[0]),y:parseFloat(point_end.split(",")[1])};
      //此处敲黑板,是任务的第二大难点,求出相对的第三个点,用于固定曲线的弯曲度,下面公式是已知三角形两点坐标和两个坐标点的夹角求第三点坐标,两个夹角我们是自定义任意值,不过不要加起来超过180度
      // 已知两点p1(x1,y1)、p2(x2,y2)和两点所对应的角度A和B,x3、y3是对应第三点的坐标,cot25°=2.14
      //x3 = (x1*cotB+x2*cotA+y2-y1)/(cotA+cotB)
      //y3 = (y1*cotB+y2*cotA+x1-x2)/(cotA+cotB)
      let x3=(p_start.x*2.14+p_end.x*2.14-p_start.y+p_end.y)/(2*2.14)
      let y3=(p_start.y*2.14+p_end.y*2.14-p_end.x+p_start.x)/(2*2.14)
      var p_crt1={x:x3,y:y3};
      var p_crt2={x:x3,y:y3};
      //下面计算贝叶斯曲线,不是几个字能说清,直接拿去用没毛病
      /**
       * 计算公式:
       *                  | 1  0  0   0|  |P0|
       * [1 t t*t  t*t*t] |-3  3  0   0|  |P1|
       *                  |3  -6  3   0|  |P2|
       *                  |-1  3  -3  1|  |p3|
       *
       * **/
      let paths=[];
      for(let i=0;i<num+1;i++){
        let t=i/num;
        var _matrix1=[1,t,t*t,t*t*t];
        var _matrix2=[
           [1,0,0,0]
          ,[-3,3,0,0]
          ,[3,-6,3,0]
          ,[-1,3,-3,1]
        ];
    
        var _matrix3=[
          [p_start.x,p_start.y]
          ,[p_crt1.x,p_crt1.y]
          ,[p_crt2.x,p_crt2.y]
          ,[p_end.x,p_end.y]
        ];
        var _matrix_tmp=[
          _matrix1[0]*_matrix2[0][0]+_matrix1[1]*_matrix2[1][0]+_matrix1[2]*_matrix2[2][0]+_matrix1[3]*_matrix2[3][0]
          ,_matrix1[0]*_matrix2[0][1]+_matrix1[1]*_matrix2[1][1]+_matrix1[2]*_matrix2[2][1]+_matrix1[3]*_matrix2[3][1]
          ,_matrix1[0]*_matrix2[0][2]+_matrix1[1]*_matrix2[1][2]+_matrix1[2]*_matrix2[2][2]+_matrix1[3]*_matrix2[3][2]
          ,_matrix1[0]*_matrix2[0][3]+_matrix1[1]*_matrix2[1][3]+_matrix1[2]*_matrix2[2][3]+_matrix1[3]*_matrix2[3][3]
        ];
    
        var _matrix_final=[
          _matrix_tmp[0]*_matrix3[0][0]+_matrix_tmp[1]*_matrix3[1][0]+_matrix_tmp[2]*_matrix3[2][0]+_matrix_tmp[3]*_matrix3[3][0]
          ,_matrix_tmp[0]*_matrix3[0][1]+_matrix_tmp[1]*_matrix3[1][1]+_matrix_tmp[2]*_matrix3[2][1]+_matrix_tmp[3]*_matrix3[3][1]
        ];
         //下面注释掉的原因是入参是经纬度,但leaflet渲染需要的是纬度在前经度在后的数组,然后你懂的
        // var _res_point={
        //   x:_matrix_final[0]
        //   ,y:_matrix_final[1]
        // };
        var _res_point=[_matrix_final[1],_matrix_final[0]];
        paths.push(_res_point);
      }
      return paths;
    }
    

    走了一两天弯路,才摸索出来,原创不易,你的点赞和评论是我原创的动力,谢谢~

    展开全文
  • C#画坐标系及曲线

    热门讨论 2012-09-05 16:29:05
    程序中含一个Form,程序运行后,单击form的右下角就会出现图形 程序的可移植性较强
  • VTK鼠标画线+VTK坐标转换问题+实例

    千次阅读 2018-03-02 17:00:39
    本人在VTK实现在渲染窗口上鼠标画线的探究过程。要在窗口上鼠标画线首先要做的就是重写鼠标交互事件,于是就在官方网站找到重写鼠标响应事件的demo,然后再更改官方的demo,实现自己需要的功能。我的想法是:1...

    本人在用VTK实现在渲染窗口上用鼠标画线的探究过程。

    要在窗口上用鼠标画线首先要做的就是重写鼠标交互事件,于是就在官方网站找到重写鼠标响应事件的demo,然后再更改官方的demo,实现自己需要的功能。我的想法是:

    1.获取鼠标左键按下时的坐标。

    2.获取鼠标左键上弹时的坐标。

    3.用这两个点连接一条线。

    遇到的问题时,智能获取到相对于窗口的坐标点,而不是世界相对世界坐标的坐标点。导致的结果就是画线的位置并不是鼠标左键按下和上弹的连线。


    在VS下实现的代码如下(没有用cmake管理,直接在vs下做的):

    包含一些我在实现的过程中调试的过程,已经注释:

    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkRenderer.h>
    #include <vtkSphereSource.h>
    #include <vtkPolyDataMapper.h>
    #include <vtkActor.h>
    #include <vtkSmartPointer.h>
    #include <vtkPointPicker.h>
    #include <vtkCamera.h>
    #include <vtkInteractorStyleTrackballCamera.h>
    #include <vtkNamedColors.h>
    #include <vtkObjectFactory.h>
    #include<vtkLine.h>
    #include<vtkProperty.h>
    #include<vtkPolyLine.h>
    #include<vtkUnstructuredGrid.h>
    #include<vtkDataSetMapper.h>
    #include<vtkLineSource.h>
    #include<vtkRendererCollection.h>
    #include<vtkCellPicker.h>
    #include "vtkAutoInit.h" 
    VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
    VTK_MODULE_INIT(vtkInteractionStyle);
    // Define interaction style
    vtkSmartPointer<vtkRenderer> renderer;
    double point1[3]{ 0 };
    double point2[3]{ 0 };
    double WorldPoint[3]{ 0 };
    double WorldPoint1[3]{ 0 };
    int *clickPos;
    int *clickPos1;
    class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera
    {
    public:
    	static customMouseInteractorStyle* New();
    	vtkTypeMacro(customMouseInteractorStyle, vtkInteractorStyleTrackballCamera);
    	virtual void OnLeftButtonDown()
    	{
    		std::cout << "Pressed left mouse button." << std::endl;
    		// Forward events
    	//	vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    //		int* clickPos = this->GetInteractor()->GetEventPosition();
    	    clickPos = this->GetInteractor()->GetEventPosition();
    		
    		point1[0] = clickPos[0];
    		point1[1] = clickPos[1];
    		
    		renderer->SetDisplayPoint(point1[0], point1[1], 0);
    		renderer->DisplayToWorld();
    		WorldPoint[0] = (renderer->GetWorldPoint())[0];
    		WorldPoint[1] = (renderer->GetWorldPoint())[1];
    		WorldPoint[2] = (renderer->GetWorldPoint())[2];
    
    //		double* worldPosition = picker->GetPickPosition();
    	//	std::cout << worldPosition[0] << "\t" << worldPosition[1] << std::endl;
    	//	std::cout << WorldPoint[0]<< std::endl << WorldPoint[1]<<  std::endl;
    	}
    	virtual void OnLeftButtonUp()
    	{
    		std::cout << "Pressed left mouse up." << std::endl;
    		vtkIdType  pts[2]{ 0,1 };
    		// Forward events
    		//	vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    		//		int* clickPos = this->GetInteractor()->GetEventPosition();
    		clickPos1 = this->GetInteractor()->GetEventPosition();
    		point2[0] = clickPos1[0];
    		point2[1] = clickPos1[1];
    //		std::cout << clickPos[0] << std::endl << clickPos[1] << std::endl  << std::endl ;
    		std::cout << point1[0] << std::endl << point1[1] << std::endl;
    		std::cout << clickPos1[0] << std::endl << clickPos1[1] << std::endl ;
    
    		renderer->SetDisplayPoint(point2[0], point2[1], 0);
    		renderer->DisplayToWorld();
    		WorldPoint1[0] = (renderer->GetWorldPoint())[0];
    		WorldPoint1[1] = (renderer->GetWorldPoint())[1];
    		WorldPoint1[2] = (renderer->GetWorldPoint())[2];
    		one way
    		//renderer->SetDisplayPoint(point1);
    		//renderer->SetDisplayPoint(point2);
    		//renderer->DisplayToWorld();
    		//vtkSmartPointer<vtkPoints>points = vtkSmartPointer<vtkPoints>::New();
    		//points->InsertNextPoint(point1[0], point1[1], 0);
    		//points->InsertNextPoint(clickPos1[0], clickPos1[1], 0);
    		//vtkSmartPointer<vtkPolyLine>polyline = vtkSmartPointer<vtkPolyLine>::New();
    		//polyline->GetPointIds()->SetNumberOfIds(2);
    		//polyline->GetPointIds()->SetId(0, 0);
    		//polyline->GetPointIds()->SetId(1, 1);
    		//vtkSmartPointer<vtkUnstructuredGrid>grid= vtkSmartPointer<vtkUnstructuredGrid>::New();
    		//grid->Allocate(1, 1);
    		//grid->InsertNextCell(polyline->GetCellType(), polyline->GetPointIds());
    		//grid->SetPoints(points);
    		//vtkSmartPointer<vtkDataSetMapper>mapper= vtkSmartPointer<vtkDataSetMapper>::New();
    		//mapper->SetInputData(grid);
    		//vtkSmartPointer<vtkActor> actor1 = vtkSmartPointer<vtkActor>::New();
    		//actor1->SetMapper(mapper);
    		//actor1->GetProperty()->SetColor(1.0, 0.0, 0.0); //设置颜色
    		//
    		//renderer->AddActor(actor1);
    		//
    		//renderer->GetRenderWindow()->GetInteractor()->Initialize();
    		//renderer->GetRenderWindow()->GetInteractor()->Render();
    	//	renderer->GetRenderWindow()->Start();
    		the second way
    	//	double* p = renderer->GetActors()->GetLastActor()->GetOrigin();
    		
    		vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
    		lineSource->SetPoint1(WorldPoint);
    		lineSource->SetPoint2(WorldPoint1);
    		vtkSmartPointer<vtkPolyDataMapper> mapper =
    			vtkSmartPointer<vtkPolyDataMapper>::New();
    		mapper->SetInputConnection(lineSource->GetOutputPort());
    		vtkSmartPointer<vtkActor> actor1 = vtkSmartPointer<vtkActor>::New();
    		actor1->SetMapper(mapper);
    		actor1->GetProperty()->SetColor(1.0, 0.0, 0.0);
    		
    	//	actor1->SetOrigin(0, 0,0);
    		this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(actor1);
    		renderer->GetRenderWindow()->GetInteractor()->Initialize();
    		renderer->GetRenderWindow()->GetInteractor()->Render();
    	//	vtkSmartPointer<vtkCellArray>lines = vtkSmartPointer<vtkCellArray>::New();
    		lines->InsertNextCell(2);
    	//	lines->InsertNextCell(2, pts);
    	//	vtkSmartPointer<vtkPolyData>polydata = vtkSmartPointer<vtkPolyData>::New();
    	//	polydata->SetPoints(points);
    	//	polydata->SetPolys(lines);
    	//	vtkSmartPointer<vtkPolyDataMapper>linemapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    	//	linemapper->SetInputData(polydata); //测试划线
    	//	vtkSmartPointer<vtkProperty>linepro = vtkSmartPointer<vtkProperty>::New();
    	//	
    	//	linepro->SetColor(0, 0, 0);
    	//	linepro->SetOpacity(1); //透明度
    	//	vtkSmartPointer<vtkActor>lineact = vtkSmartPointer<vtkActor>::New();
    	//	lineact->SetMapper(linemapper);
    	//	lineact->SetProperty(linepro);
    	//	
    	//	renderer->AddActor(lineact);
    	//	renderer->GetRenderWindow()->Start();
    
    		/*vtkSmartPointer<vtkRenderer>render = vtkSmartPointer<vtkRenderer>::New();
    		render->AddActor(lineact);
    		vtkSmartPointer<vtkRenderWindow>renwin = vtkSmartPointer<vtkRenderWindow>::New();
    		renwin->AddRenderer(render);
    		vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    		iren->SetRenderWindow(renwin);
    		iren->Initialize();
    		iren->Start();*/
    
    //		renderer->Render();
    		
    	}
    
    	virtual void OnMiddleButtonDown()
    	{
    		std::cout << "Pressed middle mouse button." << std::endl;
    		// Forward events
    		vtkInteractorStyleTrackballCamera::OnMiddleButtonDown();
    	}
    
    	virtual void OnRightButtonDown()
    	{
    		std::cout << "Pressed right mouse button." << std::endl;
    		// Forward events
    		vtkInteractorStyleTrackballCamera::OnRightButtonDown();
    	}
    
    };
    
    vtkStandardNewMacro(customMouseInteractorStyle);
    
    int main(int, char *[])
    {
    
    	vtkSmartPointer<vtkSphereSource> sphereSource =
    		vtkSmartPointer<vtkSphereSource>::New();
    	sphereSource->SetCenter(0.0, 0.0, 0.0);
    	sphereSource->SetRadius(5.0);
    	sphereSource->Update();
    
    	vtkSmartPointer<vtkPolyDataMapper> mapper =
    		vtkSmartPointer<vtkPolyDataMapper>::New();
    	mapper->SetInputConnection(sphereSource->GetOutputPort());
    
    	vtkSmartPointer<vtkActor> actor =
    		vtkSmartPointer<vtkActor>::New();
    	actor->SetMapper(mapper);
    
    	vtkSmartPointer<vtkNamedColors> colors =
    		vtkSmartPointer<vtkNamedColors>::New();
    
    	renderer =
    		vtkSmartPointer<vtkRenderer>::New();
    	renderer->SetBackground(colors->GetColor3d("Slate_grey").GetData());
    	renderer->AddActor(actor);
    
    	vtkSmartPointer<vtkRenderWindow> renderWindow =
    		vtkSmartPointer<vtkRenderWindow>::New();
    	renderWindow->AddRenderer(renderer);
    
    	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
    		vtkSmartPointer<vtkRenderWindowInteractor>::New();
    	renderWindowInteractor->SetRenderWindow(renderWindow);
    
    	vtkSmartPointer<customMouseInteractorStyle> style =
    		vtkSmartPointer<customMouseInteractorStyle>::New();
    	renderWindowInteractor->SetInteractorStyle(style);
    
    	renderWindowInteractor->Initialize();
    	renderWindowInteractor->Start();
    
    	return EXIT_SUCCESS;
    }

    结果如下:


    关于坐标系的理论就不说了,大家都有买书,书上都有示意图,只是书上可能没有这样的实例。

    参考:

    VTK官网上鼠标事件自定义:https://lorensen.github.io/VTKExamples/site/Cxx/Interaction/MouseEvents/

    坐标转换问题参考了:http://tieba.baidu.com/p/4873446950

    这个bug搞了两天,希望可以帮到遇到同样问题的人,节约时间,少走一点弯路。

    展开全文
  • c# 直线,曲线和坐标

    热门讨论 2009-02-11 10:00:26
    在winform界面上画坐标,360的箭头,曲线等
  • Openlayers 根据坐标点画点线圆多边形

    千次阅读 2018-08-17 15:05:28
    根据坐标点画点线圆多边形,代码如下 Geometry type &nbsp; Point LineString Polygon Circle None Bezier 绘制 绘制圆形 绘制线段 绘制多边形 绘制单个点 清除所有 清除...

    根据坐标点画点线圆多边形,代码如下

    Point LineString Polygon Circle None Bezier 绘制 绘制圆形 绘制线段 绘制多边形 绘制单个点 清除所有 清除指定

    ///地图部分
    var map = new ol.Map({
    //设置地图图层
    layers:[raster,vector],
    // 让id为map的div作为地图的容器
    target:‘map’,
    overlays:[overlay],
    // 设置显示地图的视图
    view:new ol.View({
    center:[13404016.389345577, 4314908.465212342], // 定义地图显示中心
    zoom:12 //缩放层级
    }),
    controls:ol.control.defaults({
    attributionOptions:{
    collapsible:false
    }
    })

    });
    
    //下拉列表切换
    var typeSelect = document.getElementById('type');
    

    //添加形状的函数
    var draw;
    function addInteraction() {
    var value = typeSelect.value;
    if(value !== ‘None’){
    //ol.interaction.Draw该类允许用户在地图上绘制一些几何图形,
    // 可以通过构造方法设置type属性来指写是绘制哪种几何图形。目前支持点,线,多边形,圆形。
    draw = new ol.interaction.Draw({
    source:source,
    type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)
    });
    draw.on(“drawend”, function(evt){
    const geom = evt.feature.getGeometry();
    console.log(geom.getType());
    if (geom.getType() == ‘Circle’) {
    console.log(geom.getCenter());
    console.log(geom.getRadius());
    alert(“圆形:”+geom.getCenter()+","+geom.getRadius());
    } else {
    const points = geom.getCoordinates();
    console.log(points,“ddddddd”);
    alert(“返回坐标:”+points);
    }
    map.removeInteraction(draw);
    }, this);
    map.addInteraction(draw);
    }
    }
    addInteraction();
    typeSelect.onchange = function () {
    map.removeInteraction(draw);
    addInteraction();

    };

    //向地图中添加点击处理程序以呈现弹出式窗口。
    //map.on(‘click’,function (evt) {
    //坐标
    //var coordinate = evt.coordinate;
    // console.log(coordinate);
    //ol.proj.transform(coordinate, source, destination)来转换不同的坐标点,
    // 比如,将地理坐标系108.4,23.7转换成墨卡托坐标系
    //var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
    // coordinate,‘EPSG:3857’,‘EPSG:4326’
    // ));
    // content.innerHTML = ‘

    • ’+’
    • ’+“坐标系:”+’’+’’+hdms+’’+’’+’
    • ’+’
    ’;
    //verlay.setPosition(coordinate);

    // });
    function drawgeometry(){
    addInteraction();
    }

    var displayarr = [];
    // 清除所有
    function areaAllClear(){

    if(displayarr.length>0){
    for(var i=0; i<displayarr.length;i++){
    source.removeFeature(displayarr[i][1]);
    }
    displayarr = [];
    }

    }

    function clearOne(){
    var str = 1;
    areaClear(str);
    }

    // 清除指定
    function areaClear(data){
    var temparr;
    if(data.indexOf(",")>-1){
    temparr = data.split(",");
      alert(‘str中包含bc字符串’);

    }
    var temparr = data.split(",");
    if(temparr.length>0){
    for(var i=0; i<temparr.length;i++){
    for(var j=0; j<displayarr.length;j++){
    if(temparr[i] == displayarr[j][0]){
    source.removeFeature(displayarr[j][1]);
    }
    }

    }
    

    }

    }

    // 绘制圆形 [[13402105.463638451,4313876.565330492],[13407761.803731553,4316322.550235618],[13404589.66705772,4319418.249881168],[13401914.371067738,4316475.424292188]])
    function drawcircle(){
    var str = “13401952.589581877,4315481.742924481,2197.1491052936763”;
    var pointarr = str.split(",");
    var arr = [];
    for(var i = 0;i<pointarr.length;i++){
    arr.push(pointarr[i]-0);
    }
    console.log(arr[0]+"="+arr[1]+"="+arr[2]);
    //var circle1 = new ol.Feature(new ol.geom.Circle([13401952.589581877,4315481.742924481],2197.1491052936763));
    var circle1 = new ol.Feature(new ol.geom.Circle([arr[0],arr[1]], arr[2]));
    source.addFeature(circle1);
    displayarr.push([1,circle1]);
    }

    //绘制线段
    function drawLines(){
    var str = “13402105.463638451,4313876.565330492,13407761.803731553,4316322.550235618,13404589.66705772,4319418.249881168,13401914.371067738,4316475.424292188”;

    var distrivtarr = str.split(",");
    var pointarr = [];
    for(var i=0; i<distrivtarr.length-1;){
    pointarr.push([distrivtarr[i]-0,distrivtarr[i+1]-0]);
    console.log(i+"====="+distrivtarr[i]+","+distrivtarr[i+1]);
    i=i+2;
    }
    // var line = new ol.geom.LinearRing(pointarr);

    var LineString1 = new ol.Feature(new ol.geom.LineString([[13402105.463638451,4313876.565330492],[13407761.803731553,4316322.550235618],[13404589.66705772,4319418.249881168],[13401914.371067738,4316475.424292188]]));

    var LineString2 = new ol.Feature(new ol.geom.LineString(pointarr));

    source.addFeature(LineString2);
    displayarr.push([2,LineString2]);
    /setTimeout(function(){
    source.removeFeature(circle1);
    },3000);
    /
    //vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([13401952.589581877,4315481.742924481], 2197.1491052936763)));

    /var vectorSource = new ol.source.Vector({
    features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
    });
    /

    //vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([5e6, 7e6], 1e6)));

    /var vectorLayer = new ol.layer.Vector({
    source: vectorSource,
    style: styleFunction
    });
    /
    /* var lineFeature = new ol.Feature(
    new ol.geom.LineString([[13402105.463638451,4313876.565330492],[13407761.803731553,4316322.550235618],[13404589.66705772,4319418.249881168],[13401914.371067738,4316475.424292188]]));
    map.layers = new layers({
    new ol.layer.Vector({
    source: new ol.source.Vector({
    features: [ lineFeature]
    })
    });
    })/
    // 13402105.463638451,4313876.565330492
    // 13407761.803731553,4316322.550235618
    // 13404589.66705772,4319418.249881168
    // 13401914.371067738,4316475.424292188
    /
    map= new ol.Map({
    //interactions: ol.interaction.defaults().extend([new app.Drag()]),
    layers: [
    new ol.layer.Tile({
    source: new ol.source.TileJSON({
    url: ‘https://api.tiles.mapbox.com/v3/mapbox.geography-class.json?secure’
    })
    }),
    new ol.layer.Vector({
    source: new ol.source.Vector({
    features: [ lineFeature]
    }),
    })
    ],
    target: ‘map’,
    view: new ol.View({
    center: [13404016.389345577, 4314908.465212342],
    zoom: 12
    })
    });*/
    }
    // 多边形
    function drawPolygon(){
    var str = “13399544.823190892,4311812.765566792,13400079.88238889,4309596.091746522,13404704.322600143,4309710.74728895,13402602.3043223,4311736.328538507,13399544.823190892,4311812.765566792”;
    var Polygon1 = new ol.Feature(new ol.geom.Polygon([[[13399544.823190892,4311812.765566792],[13400079.88238889,4309596.091746522],[13404704.322600143,4309710.74728895],[13402602.3043223,4311736.328538507],[13399544.823190892,4311812.765566792]]]));
    var distrivtarr = str.split(",");
    var pointarr = [];
    for(var i=0; i<distrivtarr.length-1;){
    pointarr.push([distrivtarr[i]-0,distrivtarr[i+1]-0]);
    // console.log(i+"====="+distrivtarr[i]+","+distrivtarr[i+1]);
    i=i+2;
    }
    var Polygon2 = new ol.Feature(new ol.geom.Polygon([pointarr]));
    source.addFeature(Polygon2);
    displayarr.push([3,Polygon2]);

    }
    // 点
    function drawPoint(){
    var Point1 = new ol.Feature(new ol.geom.Point([13396745.317029951, 4310723.5379137285]));
    source.addFeature(Point1);
    displayarr.push([4,Point1]);
    }

    更多技术或者资料分享关注公众号:zhulin1028 二维码:[添加链接描述](https://img-blog.csdnimg.cn/20201030172030219.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030172030219.png#pic_center)
    展开全文
  • 知道两点坐标画直线有很种方法,这里主要介绍使用DDA算法: DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。 我们已知直线两个端点P0(x0,y0)和P1(x1,y1),就能求...

    有时候需要演示一下直线是怎么样生成的,就可以使用matplotlib作为教学工具,把演示过程动态化,并且可视化,也可以让学生快速地学习和修改直线的算法。知道两点坐标画直线有很多种方法,这里主要介绍使用DDA算法:

    DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。

    我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b 。

     

    在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。如果x的步进为1(x每次加1,即x = x +1),那么y的步进就为k+b;同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。

     

    为进一步简化计算,通常可令b取0,将起点看作(0,0)。设当前点为(xi, yi)则用DDA算法求解(xi+1,yi+1)的计算公式可以概括为:

     

    xi+1 = xi + xStep (1)

    yi&#

    展开全文
  • vs2010 c# graphics 坐标曲线

    万次阅读 2017-07-31 15:51:14
    坐标为每10s传感器采集的数据 代码:using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.IO; using System.Drawing; ...
  • 【canvas】使用canvas坐标线

    千次阅读 2017-12-17 16:46:51
    具体代码如下: 在指定位置画多 canvas{ border: 1px dashed gray; } var cvs = document.getElementById('cvs'); var ctx = cvs.getContext('2d');
  • openlayers通过坐标点画出一块区域

    千次阅读 2018-11-23 15:38:16
    其中的文件是json格式的本地文件,本地文件里坐标了,所以将里面的所需要的坐标匹配出来,然后写成json格式, 这样就通过坐标画出面了。 $.getJSON('../../scripts/shanxi-city.geo.json', function (city) { ...
  • 本部分介绍MATLAB的图形窗口和二维图形的绘制...a:当x是实向量时,则绘制出以该向量元素的下标(即向量的长度)为横坐标,以该向量元素的值为纵坐标的一条连续曲线 b:当x是实矩阵时,按列绘制出每列元素值对应的下...
  • 在open layers 3 中,已知的经纬度,怎么通过画线将经纬度连起来?官方的api是手动拖动的位置来画线的,与我的需求不太一样,望知道的大神指点迷津!
  • arcgis根据经纬度xyz坐标点生成等高线1.Excel to table2.display X Y Data3.Create TIN4.生成DEM数据。5.生成等高线。 有些小伙伴会说,我有这么一个经纬度和高程的数据,那么我怎么怎么生成等高线数据? 答:本篇小...
  • plt.xlim(-10,10) #x坐标轴范围-10~10 plt.ylim(-10,10) #第一个参数为标记文本,第二个参数为标记对象的坐标,第三个参数为标记位置 plt.annotate('(2,2)', xy=(2,2), xytext=(2.5,2.5)) plt.annotate('(-2,-2)',
  • creo 根据点坐标文件创建样条曲线

    千次阅读 2020-05-23 18:21:39
    1.3 修正样条曲线 双击样条曲线,选择文件,选择刚插入的局部坐标系,打开坐标点的pts文件,确认即可 方法二:导入坐标数据文件 2.1 创建坐标点ibl文件 注意:在点的坐标前要加红框内四句话 将后缀名改为ibl格式 ...
  • !图片说明](https://img-ask.csdn.net/upload/201704/18/1492520117_55239.jpg) _原来是在imagebox控件上做的操作,现在改为wpf的Image控件,要怎么才能实现把坐标以曲线的形式到图片上呢?
  • 使用高德地图根据坐标点画出路线

    万次阅读 2014-06-11 11:41:53
    LatLng的是为了方便画线时直接。 解析数据里的格式(我的是JSON解析) JSONObject data=array.getJSONObject(i); GeoPoint point=CoordinateConvert.fromGpsToAMap(data.getDouble("lat"),...
  • 刚入门者经常头疼如何让plot函数只绘制而不绘制线。先说结论! 设置关键字参数linestyle=''或者linestyle=None,一定不显示线条! 不设置关键字参数,格式字符串fmt包含标记设置,不包含线形设置,不显示线条! ...
  • 进行优化,就是将每次自动刷新的时候,第二次获得的数值坐标值减去第一次的数组坐标值的差值数值,将这些值画线,会提高性能。 1.前端vue页面设置: 在methods方法中ajax成功回掉中进行调用: if(that.oldTracks...
  • 基于opencv的车道线检测(c++)

    万次阅读 多人点赞 2019-06-11 17:37:24
    传统的车道线检测,多数是基于霍夫直线检测,其实这个里面有个很大的误区,霍夫直线拟合容易受到各种噪声干扰,直接运用有时候效果不好,更的时候通过霍夫直线检测进行初步的筛选,然后再有针对性的进行直线拟合,...
  • 应用场景: 最近在开发过程中,有个需求,需要在天地图中画线,结束后获取对应的坐标集合,查阅 OpenLayers API 和网上的相关资料后得以实现,特此记录。 因为直线间的是无数个,我们不可能去获取这线上的所有...
  • 今天做的东西用到了Opencv的几个功能,下面对他们依次进行总结。 (1)Opencv对感兴趣区域的复制 具体是这样的,我想把两张图像进行拼接成一幅图像,很容易想象到的方法...网上很的总结方法都是Opencv的C风格的代
  • MFC设置坐标画曲线取

    千次阅读 2014-08-05 17:20:04
    首先声明本程序不是本人全部原创,改编于一个老外的程序,下面是人家编写此程序...然后,利用画线记录在客户区; 最后,捕捉鼠标的位置。 具体代码,下个博文再详细写,赶紧下班回去了。 
  • arcmap坐标点生成线和面(更正版)

    万次阅读 2014-10-18 18:33:09
    (1 )做了如下更正:之前在网上搜到的结果是:arcmap坐标点生成线和面 ------ 注意该功能在ArcGIS10中没有了,当时自己也没有想就转载了,再此做一下更正或者叫做总结 (2 )ArcGIS10 1.0.1中是这个功能不是...
  • VB制作 VB自动获取CAD内线坐标

    热门讨论 2012-08-03 16:48:13
    VB制作 VB自动获取CAD内线坐标 很好用的小工具 开发CAD与VB必备
  • Matlab在曲线上标出坐标点

    万次阅读 2019-04-25 15:23:44
    1.标记定点 ... plot(x坐标,y坐标,'rs')% 绘制(x坐标,y坐标)的定点,参数'rs'表示的样式为红色正方形 2.通过绘图工具窗口编辑 点击红框图标,显示绘图工具。 进入编辑页面后,可选择数据...
  • 怎么matlab一个已知图片里曲线的二维或者三维坐标图,大神求解????
  • turtle实现正方形画圆

    千次阅读 多人点赞 2018-11-19 13:34:54
    每次都乌龟(turtle)来出一个正方形,然后通过旋转3°后,继续一样的正方形,在通过120次循环后就实现了完整的圆,这里当然也可以其他的角度和次数,只要能完成360度就可以了。 先看完成的图形和代码。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,379
精华内容 44,151
关键字:

如何用坐标点画多段线