Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Algorithms
  4. Linear line

Linear line

Scheduled Pinned Locked Moved Algorithms
c++helpquestion
16 Posts 7 Posters 7 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Dan Neely

    EDIT: Not sure if this is needed or not: if the slope between x_1,y_1 and x_5,y_5 is greater than 1, swap the x and y values for each coordinate pair. This swap is needed to keep the delta value in the next step smaller than 1. Create a function for the line y = f(x) using points 1 and 5. Then of each of the 3 points in the middle calculate f(x_n), if ABS(f(x_n) - y_n) < 1, then x_n,y_n is on on the line (give or take the rounding error from forcing integral values).

    -- You have to explain to them [VB coders] what you mean by "typed". their first response is likely to be something like, "Of course my code is typed. Do you think i magically project it onto the screen with the power of my mind?" --- John Simmons / outlaw programmer

    F Offline
    F Offline
    flippydeflippydebop
    wrote on last edited by
    #7

    Cheers Dan. This is great.. Im just a little confused about the functions f(x) and f(x_n). What is the body of these functions?

    D 1 Reply Last reply
    0
    • L Luc Pattyn

      Hi Dan, Same idea, but without any math showing, the lazy approach: - Create a GraphicsPath - add the line connecting the end points - widen with a pen (I guess width=3, more gives more tolerance) - check all points fall within (that's GraphicsPath.IsVisible) :)

      Luc Pattyn


      try { [Search CP Articles] [Search CP Forums] [Forum Guidelines] [My Articles] } catch { [Google] }


      F Offline
      F Offline
      flippydeflippydebop
      wrote on last edited by
      #8

      Hiya Luc. Thanks also for your reply. This is an interesting approach here, however GraphicsPath is a .net class while i am using native C++/MFC.

      1 Reply Last reply
      0
      • F flippydeflippydebop

        Cheers Dan. This is great.. Im just a little confused about the functions f(x) and f(x_n). What is the body of these functions?

        D Offline
        D Offline
        Dan Neely
        wrote on last edited by
        #9

        The same function, f(x) is the generic function, x_n is x_1, x_2,... (the x points of your test coordinates). Probably best done using the slope-intercept form. Google if you need help getting the values from two points.

        -- You have to explain to them [VB coders] what you mean by "typed". their first response is likely to be something like, "Of course my code is typed. Do you think i magically project it onto the screen with the power of my mind?" --- John Simmons / outlaw programmer

        F 1 Reply Last reply
        0
        • D Dan Neely

          The same function, f(x) is the generic function, x_n is x_1, x_2,... (the x points of your test coordinates). Probably best done using the slope-intercept form. Google if you need help getting the values from two points.

          -- You have to explain to them [VB coders] what you mean by "typed". their first response is likely to be something like, "Of course my code is typed. Do you think i magically project it onto the screen with the power of my mind?" --- John Simmons / outlaw programmer

          F Offline
          F Offline
          flippydeflippydebop
          wrote on last edited by
          #10

          ahh-ahhh..... the penny has dropped. Thanks again.

          1 Reply Last reply
          0
          • F flippydeflippydebop

            Hiya guys.. Using C++ does anyone know how i can tell if a line is linear or not? I want the user to enter 5 readings which i can plot on a chart. However i would like a function to find out if the plotted line is linear. Any help would be greatly appreciated!

            H Offline
            H Offline
            Habib Ahmed Bhutto
            wrote on last edited by
            #11

            hi flippydeflippydebop :doh: "entering 5 readings" u mean input 5 values then in each reading u will get a point's value mean(x,y) it means int x[5], y[5] for( i=0; i<5; i++ ) read x[i], y[i] resultX = x[0] - x[1] - x[2] - x[3] - x[4] resultY = y[0] - y[1] - y[2] - y[3] - y[4] if( ( resultX == 0 ) and ( resultY == 0 ) ) print "line is linear" else print "line is not linear" i think this is the solution if it is true plz inform me if it is wrong then also inform me plz.. in case it is true u can further enhance and can be maked easy and powerful then this. plz inform me about its correctness

            habib bhutto

            1 Reply Last reply
            0
            • F flippydeflippydebop

              Hiya guys.. Using C++ does anyone know how i can tell if a line is linear or not? I want the user to enter 5 readings which i can plot on a chart. However i would like a function to find out if the plotted line is linear. Any help would be greatly appreciated!

              H Offline
              H Offline
              Habib Ahmed Bhutto
              wrote on last edited by
              #12

              :)hi flippydeflippydebop :doh: "entering 5 readings" u mean input 5 values then in each reading u will get a point's value mean(x,y) it means int x[5], y[5] for( i=0; i<5; i++ ) read x[i], y[i] resultX = x[0] - x[1] - x[2] - x[3] - x[4] resultY = y[0] - y[1] - y[2] - y[3] - y[4] if( ( resultX == 0 ) and ( resultY == 0 ) ) print "line is linear" else print "line is not linear" i think this is the solution if it is true plz inform me if it is wrong then also inform me plz.. in case it is true u can further enhance and can be maked easy and powerful then this. plz inform me about its correctness

              habib bhutto

              D 1 Reply Last reply
              0
              • H Habib Ahmed Bhutto

                :)hi flippydeflippydebop :doh: "entering 5 readings" u mean input 5 values then in each reading u will get a point's value mean(x,y) it means int x[5], y[5] for( i=0; i<5; i++ ) read x[i], y[i] resultX = x[0] - x[1] - x[2] - x[3] - x[4] resultY = y[0] - y[1] - y[2] - y[3] - y[4] if( ( resultX == 0 ) and ( resultY == 0 ) ) print "line is linear" else print "line is not linear" i think this is the solution if it is true plz inform me if it is wrong then also inform me plz.. in case it is true u can further enhance and can be maked easy and powerful then this. plz inform me about its correctness

                habib bhutto

                D Offline
                D Offline
                Dan Neely
                wrote on last edited by
                #13

                won't work. points 10,10 11,11 12,12 13,13 14,14. Obviously linear, but resultx and resulty are both -50.

                -- You have to explain to them [VB coders] what you mean by "typed". their first response is likely to be something like, "Of course my code is typed. Do you think i magically project it onto the screen with the power of my mind?" --- John Simmons / outlaw programmer

                1 Reply Last reply
                0
                • F flippydeflippydebop

                  Hiya guys.. Using C++ does anyone know how i can tell if a line is linear or not? I want the user to enter 5 readings which i can plot on a chart. However i would like a function to find out if the plotted line is linear. Any help would be greatly appreciated!

                  R Offline
                  R Offline
                  Russell
                  wrote on last edited by
                  #14

                  To understand if a line is 'approzimately' a line you can use the Hough transform. Hope helps


                  Russell

                  R 1 Reply Last reply
                  0
                  • R Russell

                    To understand if a line is 'approzimately' a line you can use the Hough transform. Hope helps


                    Russell

                    R Offline
                    R Offline
                    Russell
                    wrote on last edited by
                    #15

                    here is a link to the algorithm. http://en.wikipedia.org/wiki/Hough_transform[^] :-D


                    Russell

                    1 Reply Last reply
                    0
                    • F flippydeflippydebop

                      Hiya guys.. Using C++ does anyone know how i can tell if a line is linear or not? I want the user to enter 5 readings which i can plot on a chart. However i would like a function to find out if the plotted line is linear. Any help would be greatly appreciated!

                      S Offline
                      S Offline
                      stevepqr
                      wrote on last edited by
                      #16

                      You could use the equation of a line y=mx+c, we don't know the value of c (and we can't calculate it because the line might not be straight) but we can force it to be zero by shifting all the x,y coordinates by the same amount such that the first point is 0,0 now c=0 and we can calculate m for each point, m=y/x (except for the first point since this will result in divide by zero!) If the line is straight then the value for m will be the same for each point. Should be relatively easy and quick to code... :)

                      Apathy Rules - I suppose...

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups