{"id":26984,"date":"2022-12-21T15:56:38","date_gmt":"2022-12-21T10:26:38","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/"},"modified":"2022-12-21T15:56:38","modified_gmt":"2022-12-21T10:26:38","slug":"solved-draw-perpendicular-line-between-two-lines-in-ios-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/","title":{"rendered":"[Solved] Draw Perpendicular line between two lines in iOS [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-57821135\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"57821135\" data-parentid=\"57820408\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>So you need a bit of math&#8230; In theory you need to draw a line from <code>P3<\/code> to point <code>X<\/code> which lies between <code>P1<\/code> and <code>P2<\/code>. The vector between <code>P1<\/code> and <code>X<\/code> is actually a projection of <code>P3-P1<\/code> to a line described by <code>P1<\/code> and <code>P2<\/code>. So:<\/p>\n<pre><code>X = P1 + (P3-P1)*((P2-P1)\/(|P2-P1|)) * ((P2-P1)\/(|P2-P1|))\n<\/code><\/pre>\n<p>To use <code>CGPoint<\/code> this could work:<\/p>\n<pre><code>func projectedPoint(_ point: CGPoint, toLine line: (a: CGPoint, b: CGPoint)) -&gt; CGPoint {\n\n    guard line.a != line.b else { return .zero } \/\/ Not a line\n\n    let direction: CGPoint = {\n        \/\/ A direction of line with a distance of 1\n        let a = line.a\n        let b = line.b\n        let subtraction = CGPoint(x: b.x - a.x, y: b.y - a.y)\n        let distance = sqrt(subtraction.x*subtraction.x + subtraction.y*subtraction.y)\n        return CGPoint(x: subtraction.x\/distance, y: subtraction.y\/distance)\n    }()\n\n    let projectionDistance: CGFloat = {\n        let vector = CGPoint(x: point.x-line.a.x, y: point.y-line.a.y) \/\/ From A to POINT\n        return vector.x*direction.x + vector.y*direction.y \/\/ A simple dot product\n    }()\n\n    return CGPoint(x: line.a.x + direction.x*projectionDistance, y: line.a.y + direction.y*projectionDistance)\n}\n<\/code><\/pre>\n<p>So in your case:<\/p>\n<pre><code>X = projectedPoint(P3, toLine:(P1, P2))\n<\/code><\/pre>\n<p>Now you simply draw a line between <code>X<\/code> and <code>P3<\/code>.<\/p>\n<p>Or if you want it more function based the following should do. It should also be easy to port this to any system operating with 2D vectors which usually already includes all the provided functions:<\/p>\n<pre><code>func projectedPoint(_ point: CGPoint, toLine line: (a: CGPoint, b: CGPoint)) -&gt; CGPoint {\n\n    guard line.a != line.b else { return .zero } \/\/ Not a line\n\n    func add(_ a: CGPoint, _ b: CGPoint) -&gt; CGPoint { return CGPoint(x: a.x + b.x, y: a.y + b.y) }\n    func subtract(_ a: CGPoint, _ b: CGPoint) -&gt; CGPoint { return CGPoint(x: a.x - b.x, y: a.y - b.y) }\n    func scale(_ a: CGPoint, _ b: CGFloat) -&gt; CGPoint { return CGPoint(x: a.x*b, y: a.y*b) }\n    func dot(_ a: CGPoint, _ b: CGPoint) -&gt; CGFloat { return a.x*b.x + a.y*b.y }\n    func length(_ a: CGPoint) -&gt; CGFloat { return sqrt(a.x*a.x + a.y*a.y) }\n    func normalize(_ a: CGPoint) -&gt; CGPoint { return scale(a, 1.0\/length(a)) }\n\n    let direction: CGPoint = normalize(subtract(line.b, line.a))\n    let projectionDistance = dot(subtract(point, line.a), direction)\n\n    return add(line.a, scale(direction, projectionDistance))\n}\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Draw Perpendicular line between two lines in iOS [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] So you need a bit of math&#8230; In theory you need to draw a line from P3 to point X which lies between P1 and P2. The vector between P1 and X is actually a projection of P3-P1 to a line described by P1 and P2. So: X = P1 + (P3-P1)*((P2-P1)\/(|P2-P1|)) * ((P2-P1)\/(|P2-P1|)) &#8230; <a title=\"[Solved] Draw Perpendicular line between two lines in iOS [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/\" aria-label=\"More on [Solved] Draw Perpendicular line between two lines in iOS [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[471,522],"class_list":["post-26984","post","type-post","status-publish","format-standard","hentry","category-solved","tag-ios","tag-swift"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] So you need a bit of math&#8230; In theory you need to draw a line from P3 to point X which lies between P1 and P2. The vector between P1 and X is actually a projection of P3-P1 to a line described by P1 and P2. So: X = P1 + (P3-P1)*((P2-P1)\/(|P2-P1|)) * ((P2-P1)\/(|P2-P1|)) ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-21T10:26:38+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Draw Perpendicular line between two lines in iOS [closed]\",\"datePublished\":\"2022-12-21T10:26:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/\"},\"wordCount\":112,\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"keywords\":[\"ios\",\"swift\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/\",\"name\":\"[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\"},\"datePublished\":\"2022-12-21T10:26:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Draw Perpendicular line between two lines in iOS [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\\\/\\\/jassweb.com\"],\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/author\\\/jaspritsinghghumangmail-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb","og_description":"[ad_1] So you need a bit of math&#8230; In theory you need to draw a line from P3 to point X which lies between P1 and P2. The vector between P1 and X is actually a projection of P3-P1 to a line described by P1 and P2. So: X = P1 + (P3-P1)*((P2-P1)\/(|P2-P1|)) * ((P2-P1)\/(|P2-P1|)) ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/","og_site_name":"JassWeb","article_published_time":"2022-12-21T10:26:38+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Draw Perpendicular line between two lines in iOS [closed]","datePublished":"2022-12-21T10:26:38+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/"},"wordCount":112,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["ios","swift"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/","name":"[Solved] Draw Perpendicular line between two lines in iOS [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-21T10:26:38+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-draw-perpendicular-line-between-two-lines-in-ios-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Draw Perpendicular line between two lines in iOS [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/26984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=26984"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/26984\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=26984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=26984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=26984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}