ThinkGeo.com    |     Documentation    |     Premium Support

Two perpendicular lines

Hello, ThinkGeo Team!


How can you build your means of two perpendicular lines, having two points of the segment (A1 and A2) and the point of intersection with a perpendicular line (B)? 


For example, I have a situation on image 1. How can I get a sitaution on image 2?


 That is, I want to get the two perpendicular lines on the screen along the segment and the point of intersection of perpendicular lines. How can I better do it in your library?


 



sitauation1.png (3.12 KB)
situation2.png (3.71 KB)

The problem, even a little easier, a segment that consists of 2 points A1 and A2, it is necessary to construct a straight line through it on the screen and the second line, perpendicular to this, passing through the center of the line.

Alex,


 For getting the perpendicular line of a line segment, we already have the functions for this. You can see in the Code Community sample Offset Point at Right Angle wiki.thinkgeo.com/wiki/Map_Suite_Wp...ight_Angle the function GetAngleFromTwoVertices. I think that from there you can figure out how to adapt it for your case and this is working for line at any angle. If you still have trouble, let us know. Thank you.




Ok, Thank you for your answer, Val. I looked at your example and I have a few questions.


Let's abstract away from my problems. For example, I have a straight line. I want to tie the line and move the mouse cursor over it. That is, we have a line, I want it to rotate at an arbitrary angle behind the mouse cursor. Perpendicular lines are a special case of the code. 


double Angle2 = GetAngleFromTwoVertices(segmentMultiLineShape.Lines[0].Vertices[count - 1], segmentMultiLineShape.Lines[0].Vertices[count]);


 Your code is a line of code that I can not understand the logic. How can I calculate the angle between two vertices? or is it a projection on the axis? not so clear, how do you properly use the TranslateByDegree to solve my problem.



I would be very grateful if you could tell a little more logic to turn the line / point.


All, I kind of figured out. 


I got another interesting problem. How do I make parallel lines? :) 


Is there some simple code without playing with the angles?
For example, to make a direct parallel to this passing through the point A. It is known that such a line is always the same (if not considered overlapping).
Example of before and after is shown in Fig. As easy as possible to make such a realization of your funds?
THANK YOU!
 
 

 



pict1.png (13.9 KB)

Alex,


 I am glad I could help you out with your original question. Regarding the parallel question, if for example you want to have two parallel lines, you can use the TranslateByOffset or the TranslateByDegree. It is always going to be parallel. See the code and the picture below. Now, as in your picture, if you have a polygon in the shape of a rectangle and you want to set the polygon parallel to some line, you are going to have to get the angle of the line and use that angle in the Rotate function of the polygon. I can send you a sample like in your example but I am going to need some more time. Thank you.



 



   wpfMap1.MapUnit = GeographyUnit.Meter;

    wpfMap1.CurrentExtent = new RectangleShape(0, 100, 100, 0);

    LineShape lineShape = new LineShape();
    lineShape.Vertices.Add(new Vertex(20, 20));
    lineShape.Vertices.Add(new Vertex(80, 80));

    LineShape lineShape2 = (LineShape)lineShape.CloneDeep();

    lineShape.TranslateByOffset(20, 0);

    InMemoryFeatureLayer inMemoryFeatureLayer = new InMemoryFeatureLayer();
    inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Red, 3, true);
          
    inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

    inMemoryFeatureLayer.InternalFeatures.Add(new Feature(lineShape));
    inMemoryFeatureLayer.InternalFeatures.Add(new Feature(lineShape2));
           
    LayerOverlay dynamicOverlay = new LayerOverlay();
    dynamicOverlay.Layers.Add(inMemoryFeatureLayer);

    wpfMap1.Overlays.Add(dynamicOverlay);

    wpfMap1.Refresh();


Thank you, approximately understand how to use it. 
 If you send the code for my example, it would be great! 
  
 P.S. If I have any questions, I will write here 


Ok. I have everything turned out, thanks. 
 Could you help me out here with this problem: 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/39/aft/10153/afv/topic/Default.aspx#31381

Alex,


 I am glad that you could get everything turned out. I have plan to post a sample in our Code Community wiki.thinkgeo.com/wiki/Map_Suite_Wp...de_Samples a sample on the parallel issue.


 I will look at your new post. Thank you.