The intersection point of two lines in 3D
How to calculate the intersection point of two lines in 3D?
source code!
this is actually a rather easy operation. lets look at some basic properties of lines / vectors in 3D space:
1. If two lines intersect at a single point, then there must be exactly one plane in which the two lines are co-planar. This is pretty trivial to prove, but I won't bother here, because you can google to find out that two vectors that extend from a common point define a single plane.
2. If you take the cross-product of two vectors, the resulting vector is guaranteed to be perpendicular to both lines (this is a basic property of a cross-product). If the two lines intersect, then this cross-product will be the normal vector to the plane in which both lines lie.
3. Now transform (rotate) yours space such that your z-axis becomes parallel to the normal vector of that plane.
Now, the parametric equation for a line in 3D space is this:
(x, y, z) = (xo, yo, zo) + k(xd, yd, zd)
After you have transformed your space, you will notice that the equation of each line will now be
(x, y, z) = (xo, yo, zo) + k(xd, yd, 0)
If zo is equal for both lines, then the two lines intersect. Otherwise, the two lines do not intersect.
if the intersection exists, then to solve for it, you ignore the z coordinate, and treat it like a two dimensional system:
(x, y) = (xo, yo) + k(xd, yd)
you can use the basic 2D formula y - yo = m(x - xo), or y = m(x - xo) + yo
you can calculate m = yd / xd.
which simplifies to y = mx -mxo + yo, or 0 = mx - y + (yo - mxo)
you now have two equations of the form Ax + By + C = 0.
From there, you can use Cramer's rule to find the intersection of the two lines.
It sounds kind of complicated when you read it as I have presented it, but it's actually extremely easy to write a program for, because each step is simple mathematic operation with basically no decisions involved (hence no if-structures, except at the one point where you actually need to determine if the lines intersect).
So to reiterate, the steps required are:
1. Check if lines are parallel. If yes, check if they are the same line, and then stop.
2. If not parallel, cross-multiply the direction vectors of each line.
3. Rotate your space such that z is parallel with cross-product of lines
i. dot-product of z axis (0, 0, 1) with cross-product of lines gives angle*
ii. cross-product of z axis (0, 0, 1) with cross-product of lines gives axis of rotation.
iii. rotate your lines (i.e. point and direction vector) about that axis by negative of ange determined in (i).
4. if z value of points from both lines is the different, no solution. stop.
5. otherwise, apply Cramer's rule.
6. done.
* obtaining the angle of rotation with the dot product relies on the angle being less than 90 degrees, so check if z value of normal vector is + or -, and then perform dot product and cross-product on appropriate + or - z vector.
- Adam
Similar Messages
-
Problems finding the interception point of two lines
Hi there,
I've written a class "Linie", which extends the Line2D.Float class, and added a method to determine the interception point of two lines.
One of the two lines can be anything except horizontal and vertical, the other one (which is the one that is passed to the method) can only be horizontal or vertical (I hoped this would make it easier).
public Point schneidet(Linie l){
Point schnitt = new Point();
float m = (y1-y2)/(x1-x2);
int n = Math.round(y1-(x1*m));
if (l.y1==l.y2){ // Is line l horizontal?
int poX = Math.round((l.y1-n)/m);
schnitt.setLocation(poX,(int)l.y1);
else if (l.x1==l.x2){ // Is line l vertical?
int poY = Math.round((m*l.x1)+n);
schnitt.setLocation((int)l.x1,poY);
return schnitt;
}The equation of a line is
y = m*x + n.
Because the line l can only be horizontal or vertical, one coordinate of the interception point is always clear from the beginning, the other one is supposed to be calculated and stored in poX or poY.
But this is where the method doesn't do what it's supposed to. There must be some mistake inside the calculation with the slope (m) and n. Any ideas?Why so complicated? Are the lines real lines (straight connections between 2 points) or curves? If they are lines, you just need to inspect the coordinates of all 4 points (2 * 2 end points) and show if the points are "within" the other points ...
Intersection point of two lines
Line Intersection and its Applications
SIMPLE ALGORITHMS I - INTERSECTION OF LINES -
Drawing object on the intersections point of 2 lines.
hi guys, im very new in actionscrip , please give me some guidance.
i'm doing this project , about 2 lines intersecting each other(the 2 lines are not always on the same position) . i try to find the intersections point using collision detection method but how do i place an object on the intersections point?
if(line1.hitTestObject(line2)) // so this is how we find the intersection point but we do not know how to draw/place an object on the intersection point.then it's easier to calculate the intersection algebraically:
function intersectionF(x1:Number,y1:Number,x2:Number,y2:Number,x3:Number,y3:Number,x4:Number,y4:Number):Array {
if (x1==x2) {
if (x3==x4) {
if (x1==x3) {
return ["line1"];
} else {
return [null];
} else {
// line 1 vert, line 2 not
var m2:Number = (y3-y4)/(x3-x4);
var b2:Number = y3-m2*x3;
return [x1,m2*x1+b2];
} else {
// line 1 not vert
if(x3==x4){
// line 2 vert
var m1:Number = (y1-y2)/(x1-x2);
var b1:Number = y1-m1*x1;
return [x3,m1*x3+b1];
} else {
// line 2 not vert
m1 = (y1-y2)/(x1-x2);
b1 = y1-m1*x1;
m2 = (y3-y4)/(x3-x4);
b2 = y3-m2*x3;
var x:Number = (b2-b1)/(m1-m2);
return [x,m1*x+b1]; -
SAP Script : to display the material description in two lines
Hi All,
I'm working on scripts.
the material description field is been passed from my driver program ..into the script..
Ex: &gs_final-maktx& ..
There r a number of other fields to be displayed ...after this field ....
Is there any option to split the 'Material description into two lines'?
Ex: at present it is :
This is material description
Requirement is:
This is material
description
I mean that there a number of field berfore and after this field......in the same line
I need to jst split the materia description ...& make it to appear in two lines.....!!
Expecting your suggestions....
Edited by: vidya vidya on Nov 11, 2008 3:17 PM
Edited by: vidya vidya on Nov 11, 2008 3:20 PMFM TEXT_SPLIT ?
..but i handled this by code.
DATA: zzboldsx(18) TYPE c,
zzboldsx2(18) TYPE c,
zzboldsx3(18) TYPE c,
zzboldsx4(18) TYPE c.
DATA: i_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE ,
r_lines TYPE tline,
v_cnt LIKE sy-tabix.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = stxh-tdid
language = stxh-tdspras
name = name
object = stxh-tdobject
TABLES
lines = i_lines[]
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
* Only 4 lines of Header text supported. Can add if needed
LOOP AT i_lines INTO r_lines.
CONDENSE r_lines-tdline NO-GAPS.
v_cnt = v_cnt + 1.
CASE v_cnt.
WHEN 1.
zzboldsx = r_lines-tdline.
WHEN 2.
zzboldsx2 = r_lines-tdline.
WHEN 3.
zzboldsx3 = r_lines-tdline.
WHEN 4.
zzboldsx4 = r_lines-tdline.
WHEN OTHERS.
EXIT.
ENDCASE.
* zzbolDSX = i_lines-tdline .
ENDLOOP. -
Is there a function to output the crossing point of two plotted lines
I got some data plotted on a graph, I need to find the crossing point of the plotted lines on the graph (The plotted data curves are not linear lines) and detect it by an indicator. I could compare the to data arrays plotted and output the two closest data numbers, but the really crossing pionts is sertainly an intercept of two Interpolated values made by the graph, wich are not in my data buffers. any suggestions will be full Stared
Zamzam
HFZI only did a cursory look and didn't find any built-in function that jumped up screaming "I'm it! I'm it!", but that doesn't mean something doesn't exist given the large number of functions available with LabVIEW. An alternate solution is to use linear interpolation between successive points. If the points are close together then you can assume a straight line between the points and break this down to the simple case of finding the intersection of two lines, which is trivial. Not sure how computationally intensive of an algorithm this would be, and there would clearly be some error involved, and you will need to determine if the error is tolerable for you.
-
Determine the Intersection points of 2 splines
I have 2 sets of x,y points, from which I have created 2 splines. These lines intersect each other at a number of points. How can I determine these intersection points? As there are over 200 pairs of lines, each whose intersection points have to be calculated, I require a solution that executes very quickly.
Thanks,
ShapsYou'll have to take a look at Solving Polynomial Equations.
If you're not mathematically inclined, you might want to find help on this one. Otherwise, I'd start with Mathworld. It's a great site for Maths and Physics questions.
The higher the order of your polynomial, the harder it is to solve.
You should consider a more brute-force approach if you don't need high precision. It depends on your application, but here I cannot offer advice.
Let's say you take the following approximations for your curves: (3rd order curves, very small chance of being perfect fit...)
1) ax^3+bx^2+cx+d = 0
2) a'x^3+b'x^2+c'x+d' = 0
The curves cross each other for each x that satisfy this equation:
(a-a')x^3+(b-b')x^2+(c-c')x+(d-d') = 0
Now, the analytical solution to this can be taken from Wolfram Mathworld website and is not too complicated, but to solve for a 7th order curve... good luck!
All solutions will not necessarily fall within your data range, but if you want an approximative order for your equation, count the number of times each curve cross... and add a few orders!
As I said, it might need a brute-force approach. Good Luck. -
How to maintain the column heading in two lines
for example i have field ACCOUNTING CLEARK
i want to display this description in alv list
like ACC
clk
Please send the solution for this.
very urgent
thanks in advance
regards
venuhi
please check my code
for field KNB1-BUSAB
i want the description ACC in place of ACC CLK
CLK
means in two lines
report zfir0098 message-id zz
line-size 255
line-count 65
no standard page heading.
(C) Copyright <2006> by Eastman Kodak Company - All Rights Reserved.
Report Name : ZFIR0098
Author : Venugopalreddy.K
Created on : 12-MAY-2006
SIR# : 086279
Interface ID# : RO-01509 - Open AR Aging by Due Date
Correction# : D11K947333
Transaction code: Z_ZFIR0098
Logical Database: N/A
SAPScript name : N/A
Application Area: FI
Programs Called : N/A
Function Modules: REUSE_ALV_VARIANT_F4
REUSE_ALV_VARIANT_DEFAULT_GET
REUSE_ALV_EVENTS_GET
REUSE_ALV_LIST_DISPLAY
REUSE_ALV_EVENTS_GET
REUSE_ALV_COMMENTARY_WRITE
Description : Report to display Open AR with Aging by due
date. The open items are displayed by Linked
Accounts, Customer Account, Business unit and
Posting Date.
Correction# SIR# Modified By Date
D11Kxxxxxx xxxxxx xxxx MM/DD/YYYY
Description of change (copy from SIR):
(text)................................................................
TABLE DEFINITION *
tables : t001, "Company Codes
knvv, "Customer Master Sales Data
bsid, "Accounting: Secondary Index for Customers
knkk, "Customer master credit management: Control area data
kna1, "General Data in Customer Master
knb1, "Customer Master (Company Code)
t052, "Terms of Payment
tvv1. "Customer Group 1
TYPE POOLS *
type-pools: slis.
INTERNAL TABLE DECLARATION
Internal table for Customer Master (Company Code)
data : begin of i_knb1 occurs 0,
kunnr type knb1-kunnr,
bukrs type knb1-bukrs,
busab type knb1-busab,
end of i_knb1.
Internal table for Customer Master Sales Data
data : begin of i_knvv occurs 0,
kunnr type knvv-kunnr,
vkorg type knvv-vkorg,
kvgr1 type knvv-kvgr1,
zterm type knvv-zterm,
end of i_knvv.
Internal table for linked account nos.
data : begin of i_knkk occurs 0,
kunnr type knkk-kunnr,
kkber type knkk-kkber,
klimk type knkk-klimk,
knkli type knkk-knkli,
sbgrp type knkk-sbgrp,
grupp type knkk-grupp,
kdgrp type knkk-kdgrp,
end of i_knkk.
Internal table for Customer's credit limit
data : begin of i_knkk_knkli occurs 0,
kunnr type knkk-kunnr,
klimk type knkk-klimk,
knkli type knkk-knkli,
end of i_knkk_knkli.
Internal table for T001 records
data: begin of i_t001 occurs 0,
bukrs type t001-bukrs,
waers type t001-waers,
end of i_t001.
Internal table for BSID records
data : begin of i_bsid occurs 0,
bukrs type bsid-bukrs,
kunnr type bsid-kunnr,
zuonr type bsid-zuonr,
belnr type bsid-belnr,
budat type bsid-budat,
bldat type bsid-bldat,
waers type bsid-waers,
shkzg type bsid-shkzg,
dmbtr type bsid-dmbtr,
wrbtr type bsid-wrbtr,
zfbdt type bsid-zfbdt,
zterm type bsid-zterm,
zbd1t type bsid-zbd1t,
zbd2t type bsid-zbd2t,
zbd3t type bsid-zbd3t,
kkber type bsid-kkber,
end of i_bsid.
Internal table for Customer Master
data : begin of i_kna1 occurs 0,
kunnr type kna1-kunnr,
name1 type kna1-name1,
end of i_kna1.
Internal table for Terms of Payment
data : begin of i_t052 occurs 0,
zterm type t052-zterm,
ztagg type t052-ztagg,
ztag1 type t052-ztag1,
ztag2 type t052-ztag2,
ztag3 type t052-ztag3,
end of i_t052.
Internal table for final output
data : begin of i_output occurs 0,
kunnr1 type bsid-kunnr,
kunnr type bsid-kunnr,
bukrs type t001-bukrs,
kdgrp type knkk-kdgrp,
name1 type kna1-name1,
kvgr1 type knvv-kvgr1,
knkli type knkk-knkli,
klimk type knkk-klimk,
sbgrp type knkk-sbgrp,
zuonr type bsid-zuonr,
bldat type bsid-bldat,
due_date type bsid-zfbdt,
not_due type bsid-dmbtr,
curr_due type bsid-dmbtr,
due_01_30 type bsid-dmbtr,
due_31_60 type bsid-dmbtr,
due_61_90 type bsid-dmbtr,
due_91_180 type bsid-dmbtr,
due_181_365 type bsid-dmbtr,
due_gt_365 type bsid-dmbtr,
spcol type bsid-dmbtr,
tot_due type bsid-dmbtr,
tot_ar type bsid-dmbtr,
waers type t001-waers,
zterm type bsid-zterm,
zterm1 type knvv-zterm,
v_no_days type i,
busab type knb1-busab,
end of i_output.
Internal table for summary data
data : begin of i_output_summary occurs 0,
bukrs type t001-bukrs,
kunnr type bsid-kunnr,
name1 type kna1-name1,
kvgr1 type knvv-kvgr1,
klimk type knkk-klimk,
zterm type knvv-zterm,
kdgrp type knkk-kdgrp,
sbgrp type knkk-sbgrp,
busab type knb1-busab,
not_due type bsid-dmbtr,
curr_due type bsid-dmbtr,
due_01_30 type bsid-dmbtr,
due_31_60 type bsid-dmbtr,
due_61_90 type bsid-dmbtr,
due_91_180 type bsid-dmbtr,
due_181_365 type bsid-dmbtr,
due_gt_365 type bsid-dmbtr,
spcol type bsid-dmbtr,
tot_due type bsid-dmbtr,
tot_ar type bsid-dmbtr,
waers type t001-waers,
end of i_output_summary.
Temporary internal table for KNVV records.
data : i_knvv_tmp like i_knvv occurs 0 with header line.
Temporary internal table for KNKK records.
data : i_knkk_tmp like i_knkk occurs 0 with header line.
Temporary internal table for BSID records.
data : i_bsid_tmp like i_bsid occurs 0 with header line.
FIELD STRING DECLARATION
Structure to validate selection screen
data : begin of v_radio,
rd1 type c,
rd2 type c,
rd3 type c,
end of v_radio.
Structure to validate selection screen
data : begin of v_radio1,
rd1 type c,
rd2 type c,
rd3 type c,
end of v_radio1.
Internal Tables for ALV Report
data: i_fieldcat_alv type slis_t_fieldcat_alv,
i_sort type slis_t_sortinfo_alv,
i_sort1 type slis_t_sortinfo_alv,
i_events type slis_t_event,
v_events type slis_alv_event,
v_fieldcat_alv type slis_fieldcat_alv,
v_sort like line of i_sort,
v_sort1 like line of i_sort1,
v_layout type slis_layout_alv,
v_print type slis_print_alv,
i_list_comments type slis_t_listheader,
v_list_comments like line of i_list_comments,
v_variant like disvariant, "Layout-External Use
v_variant_save type c, "To Store the Varient
v_variant1 like disvariant,
v_exit type c. "Event exit
Data declaration
data: v_paym_days type i,
v_date_diff type i,
v_zterm type t052-zterm,
v_bukrs1 like bsid-bukrs,
v_kunnr like bsid-kunnr,
v_kdgrp like knkk-kdgrp,
v_bukrs like bsid-bukrs,
v_name1 like kna1-name1,
v_knkli like knkk-knkli,
v_klimk(20) type c,
v_kvgr1 like knvv-kvgr1,
v_kkber like knkk-kkber,
v_sbgrp like knkk-sbgrp,
v_busab like knb1-busab.
data: v_cust_not_due type bsid-dmbtr,
v_cust_curr_due type bsid-dmbtr,
v_cust_due_01_30 type bsid-dmbtr,
v_cust_due_31_60 type bsid-dmbtr,
v_cust_due_61_90 type bsid-dmbtr,
v_cust_due_91_180 type bsid-dmbtr,
v_cust_due_181_365 type bsid-dmbtr,
v_cust_due_gt_365 type bsid-dmbtr,
v_cust_spcol type bsid-dmbtr,
v_cust_tot_due type bsid-dmbtr,
v_cust_tot_ar type bsid-dmbtr,
v_curr type t001-waers,
v_name type kna1-name1,
v_kvgr type knvv-kvgr1,
v_kdgrp1 type knkk-kdgrp,
v_klimk1 type knkk-klimk,
v_zterm1 type knvv-zterm,
v_sbgrp1 type knkk-sbgrp,
v_busab1 type knb1-busab.
data: v_repid like sy-repid,
v_flag type c.
CONSTANT DEFINITION
constants:
c_sel_x(1) type c value 'X',
c_0(1) type c value '0',
c_1(1) type c value '1',
c_knkli(7) type c value 'S_KNKLI',
c_kdgrp(7) type c value 'S_KDGRP',
c_debit_s(1) type c value 'S',
c_credit_h(1) type c value 'H',
c_deflt_zterm_y000(4) type c value 'Y000',
c_sc01(4) type c value 'SC01',
c_subtotal_text type slis_formname value
'ALV_SUBTOTALS',
c_formname_top_of_page type slis_formname value
'F_TOP_OF_PAGE',
c_formname_top_of_page_summ type slis_formname value
'F_TOP_OF_PAGE_SUMM'.
Selection-screen
selection-screen begin of block b1 with frame title text-s01.
parameters : p_bukrs type t001-bukrs obligatory.
select-options : s_kvgr1 for knvv-kvgr1,
s_sbgrp for knkk-sbgrp,
s_busab for knb1-busab,
s_budat for bsid-budat,
s_kunnr for knvv-kunnr.
selection-screen end of block b1.
selection-screen begin of block b2 with frame title text-s02.
selection-screen begin of line.
parameters : p_lk_on as checkbox.
selection-screen comment 5(24) text-s10 for field p_lk_on.
selection-screen end of line.
selection-screen comment 02(67) text-s12.
selection-screen skip 1.
selection-screen begin of line.
parameters :p_knkli radiobutton group g1 user-command radi
default 'X'.
selection-screen comment 5(24) text-s05 for field p_knkli.
select-options :s_knkli for knkk-knkli.
selection-screen end of line.
selection-screen begin of line.
parameters :p_kdgrp radiobutton group g1.
selection-screen comment 5(24) text-s06 for field p_kdgrp.
select-options :s_kdgrp for knkk-kdgrp.
selection-screen end of line.
selection-screen begin of line.
parameters :p_all_lk radiobutton group g1.
selection-screen comment 5(24) text-s07 for field p_all_lk.
selection-screen end of line.
selection-screen end of block b2.
selection-screen begin of block b3 with frame title text-s03.
selection-screen begin of line.
parameters :p_op_ab radiobutton group g2.
selection-screen comment 5(32) text-s08 for field p_op_ab.
selection-screen end of line.
selection-screen begin of line.
parameters :p_ab radiobutton group g2.
selection-screen comment 5(16) text-s09 for field p_ab.
selection-screen end of line.
selection-screen end of block b3.
selection-screen begin of block b4 with frame title text-s11.
parameters :p_vari like disvariant-variant.
selection-screen end of block b4.
INITIALIZATION
initialization.
To initialize the variant
perform initialize_variant.
To fetch the default variant for the ALV report
perform display_default_variant.
At selection-screen
at selection-screen.
To validate company code
perform check_company_code.
To validate business unit
perform check_business_unit.
move: p_knkli to v_radio1-rd1,
p_kdgrp to v_radio1-rd2,
p_all_lk to v_radio1-rd3.
if not s_kvgr1[] is initial and
not s_sbgrp[] is initial.
message e045 with text-073.
endif.
at selection-screen output.
move: p_knkli to v_radio-rd1,
p_kdgrp to v_radio-rd2,
p_all_lk to v_radio-rd3.
To maintain the select options visiable and invisible
perform selection_screen_output.
Check the radio buttons selected in selection screen
if v_radio1 eq v_radio.
To maintain the default settings
perform selection_screen_check.
endif.
AT SELECTION-SCREEN ON VALUE-REQUEST
At Selection Screen Value Request.
at selection-screen on value-request for p_vari.
To Display the Existing Variants(Layout).
perform variant_help_f4 using p_vari.
Event start-of-selection
start-of-selection.
Get the cusomer number
perform get_knb1_details.
Get the customer group details
perform get_knvv_details.
Get all linked account and credit account details from KNKK
perform get_linked_accounts_details.
Get open AR documents from BSID
perform get_open_ar_details.
Get the company code and curreny.
perform get_com_code_curr.
Get the customer name
perform get_customer_name.
Get the payment term days
perform get_payment_term_days.
Populate the final table having all the field details
perform populate_final_table.
To display the output in alv list.
perform alv_list_dispaly.
Form initialize_variant
To initialize the ALV Variant
form initialize_variant.
clear: v_variant.
v_repid = sy-repid.
v_variant-report = v_repid.
v_variant-username = sy-uname.
v_variant_save = 'A'.
endform. " initialize_variant
Form display_default_variant
To fetch the Default ALV variant
form display_default_variant.
if not p_vari is initial.
v_variant-variant = p_vari.
endif.
clear v_variant1.
v_variant1 = v_variant.
The function module is used to fetch the default variant
call function 'REUSE_ALV_VARIANT_DEFAULT_GET'
exporting
i_save = v_variant_save
changing
cs_variant = v_variant1
exceptions
wrong_input = 1
not_found = 2
program_error = 3
others = 4.
Based on the SUBRC value the variant is assigned
case sy-subrc.
when 0.
p_vari = v_variant1-variant.
when 2.
clear p_vari.
endcase.
endform. " display_default_variant
Form check_company_code
Validate Company Code
form check_company_code.
select single *
from t001
where bukrs eq p_bukrs.
if sy-subrc ne 0.
message e339.
endif.
endform. " check_company_code
Form check_business_unit
Validate Business Unit
form check_business_unit.
select single *
from tvv1
where kvgr1 in s_kvgr1.
if sy-subrc ne 0.
message e045 with text-e01.
endif.
endform. " check_business_unit
Form selection-screen-output
On selection of corresponding radio button the respective
Select-option will be high lighted
form selection_screen_output.
loop at screen.
if p_knkli = c_sel_x.
Credit Account invisible
if screen-name cs c_knkli.
screen-invisible = c_0.
screen-active = c_1.
modify screen.
endif .
Customer Group visible
if screen-name cs c_kdgrp.
screen-invisible = c_1.
screen-active = c_0.
modify screen.
endif.
elseif p_kdgrp = c_sel_x.
Credit Account invisible
if screen-name cs c_knkli.
screen-invisible = c_1.
screen-active = c_0.
modify screen.
endif .
Customer Group visible
if screen-name cs c_kdgrp.
screen-invisible = c_0.
screen-active = c_1.
modify screen.
endif.
elseif p_all_lk = c_sel_x.
Credit Account invisible
if screen-name cs c_knkli.
screen-invisible = c_1.
screen-active = c_0.
modify screen.
endif .
Customer Group invisible
if screen-name cs c_kdgrp.
screen-invisible = c_1.
screen-active = c_0.
modify screen.
endif.
endif.
endloop.
endform. " selection_screen_output
Form selection_screen_check
To check the selection screen radio buttons
form selection_screen_check.
if p_knkli = c_sel_x.
if p_op_ab is initial.
p_op_ab = c_sel_x.
p_ab = ''.
endif.
elseif p_kdgrp = c_sel_x.
if p_op_ab is initial.
p_op_ab = c_sel_x.
p_ab = ''.
endif.
elseif p_all_lk = c_sel_x.
if p_op_ab is initial.
p_op_ab = c_sel_x.
p_ab = ''.
endif.
endif.
endform. " selection_screen_check
Form variant_help_f4
To get the list of ALV help variants
form variant_help_f4 using p_variant.
call function 'REUSE_ALV_VARIANT_F4'
exporting
is_variant = v_variant
i_save = v_variant_save
importing
e_exit = v_exit
es_variant = v_variant
exceptions
not_found = 1
program_error = 2
others = 3.
if sy-subrc <> 0.
If no variants exist
message s045 with text-e02.
endif.
if v_exit is initial.
p_variant = v_variant-variant.
endif.
endform. " variant_help_f4
Form get_knb1_details
To get the Customer number
form get_knb1_details.
Fetch data from Customer Master (Company Code)
based on selection criteria(company code)
select kunnr bukrs busab
from knb1
into table i_knb1
where bukrs eq p_bukrs.
if sy-subrc ne 0.
message i561.
leave list-processing.
endif.
endform. " get_knb1_details
Form get_knvv_details
To get the Customer group details
form get_knvv_details.
if not i_knb1[] is initial.
sort i_knb1 by kunnr bukrs.
delete adjacent duplicates from i_knb1 comparing kunnr bukrs.
Fecth data from Customer Master Sales Data
based on internal table I_KNB1 and selection criteria
(customer group)
select kunnr vkorg kvgr1 zterm
from knvv
into table i_knvv
for all entries in i_knb1
where kunnr eq i_knb1-kunnr
and kunnr in s_kunnr
and vkorg eq i_knb1-bukrs.
if sy-subrc ne 0.
message i561.
leave list-processing.
endif.
endif.
endform. " get_knvv_details
Form get_linked_accounts_details
To get the linked account details
form get_linked_accounts_details.
if not i_knvv[] is initial.
get unique customer account KUNNR from i_bsid.
i_knvv_tmp[] = i_knvv[].
sort i_knvv_tmp by kunnr.
delete adjacent duplicates from i_knvv_tmp comparing kunnr.
clear v_kkber.
concatenate 'C' p_bukrs+1(3) into v_kkber.
sort i_knvv_tmp by kunnr.
Fetch the Customer's account number and Customer Group
details form Customer master credit management based on
internal table i_bsid_tmp and Credit control area
select kunnr kkber klimk knkli sbgrp grupp kdgrp
from knkk
into table i_knkk
for all entries in i_knvv_tmp
where kunnr eq i_knvv_tmp-kunnr
and kkber eq v_kkber.
if not i_knkk[] is initial.
i_knkk_tmp[] = i_knkk[].
if p_lk_on = 'X' or not s_knkli[] is initial
or not s_kdgrp[] is initial.
loop at i_knkk_tmp.
loop at i_knkk where knkli eq i_knkk_tmp-knkli
and kunnr ne i_knkk_tmp-knkli.
exit.
endloop.
if sy-subrc ne 0.
delete i_knkk where knkli eq i_knkk_tmp-knkli.
endif.
endloop.
endif.
if not s_knkli[] is initial.
delete i_knkk where not knkli in s_knkli.
endif.
if not s_kdgrp[] is initial.
delete i_knkk where not kdgrp in s_kdgrp.
endif.
if not s_sbgrp[] is initial.
delete i_knkk where not sbgrp in s_sbgrp.
endif.
else.
message i561.
leave list-processing.
endif.
else.
message i561.
leave list-processing.
endif.
endform. " get_linked_accounts_details
Form get_com_code_curr
Get the company code and currency
form get_com_code_curr .
select bukrs waers
from t001
into table i_t001
where bukrs eq p_bukrs.
endform. " get_com_code_curr
Form get_open_ar_details
Read BSID for all open AR
form get_open_ar_details.
if not i_knkk[] is initial.
refresh i_knkk_tmp.
i_knkk_tmp[] = i_knkk[].
sort i_knkk_tmp by knkli.
delete adjacent duplicates from i_knkk_tmp comparing kunnr.
Fetch the from Accounting: Secondary Index for Customers
based on internal table i_knvv and selection criteria(Posting Date
-in the Document)
select bukrs kunnr zuonr belnr budat bldat waers shkzg
dmbtr wrbtr zfbdt zterm zbd1t zbd2t zbd3t kkber
from bsid
into table i_bsid
for all entries in i_knkk_tmp
where bukrs eq p_bukrs
and kunnr eq i_knkk_tmp-kunnr
and umskz eq space
and bstat eq space
and budat in s_budat.
if i_bsid[] is initial.
message i561.
leave list-processing.
endif.
else.
message i561.
leave list-processing.
endif.
endform. " get_open_ar_details
Form get_customer_name
To get the customer name
form get_customer_name.
if not i_knvv_tmp[] is initial.
Get the customer name from KNA1 for all customer
select kunnr name1
from kna1
into table i_kna1
for all entries in i_knvv_tmp
where kunnr = i_knvv_tmp-kunnr.
endif.
endform. " get_customer_name
Form get_payment_term_days
To get the payment days
form get_payment_term_days.
if not i_bsid[] is initial.
clear i_bsid_tmp.
refresh i_bsid_tmp.
i_bsid_tmp[] = i_bsid[].
sort i_bsid_tmp by zterm.
delete i_bsid_tmp where shkzg ne c_debit_s.
if not i_bsid_tmp[] is initial.
Get the Payment days from T052
select zterm ztagg ztag1 ztag2 ztag3
from t052
into table i_t052
for all entries in i_bsid
where zterm = i_bsid-zterm.
endif.
endif.
endform. " get_payment_term_days
Form populate_final_table
To polupate final internal table
form populate_final_table.
sort i_bsid.
sort i_kna1 by kunnr.
sort i_knkk by kunnr.
sort i_knkk_knkli by kunnr.
sort i_knvv by vkorg kunnr.
sort i_t052 by zterm ztag1 ztag2 ztag3.
sort i_t001 by bukrs.
loop at i_bsid.
clear i_knb1.
read table i_knb1 with key kunnr = i_bsid-kunnr
binary search.
if not i_knb1-busab in s_busab.
continue.
else.
i_output-busab = i_knb1-busab.
endif.
clear i_knvv.
read table i_knvv with key kunnr = i_bsid-kunnr
vkorg = i_bsid-bukrs
binary search.
if not i_knvv-kvgr1 in s_kvgr1.
continue.
else.
i_output-kvgr1 = i_knvv-kvgr1.
i_output-zterm1 = i_knvv-zterm.
endif.
To read the data from kna1,knkk and knvv and moving data to final
internal table i_output.
perform move_kna1_knkk_knvv.
To read the data from bsid and t052 and moving data to final
internal table i_output.
perform move_bsid_t052.
To calculate the number of days.
perform move_no_of_days.
endloop.
endform. " populate_final_table
Form move_kna1_knkk_knvv
To read the data fron kna1,knkk and knvv
form move_kna1_knkk_knvv.
clear i_kna1.
read table i_kna1 with key kunnr = i_bsid-kunnr
binary search.
if sy-subrc eq 0.
i_output-name1 = i_kna1-name1.
endif.
clear i_knkk.
read table i_knkk with key kunnr = i_bsid-kunnr
binary search.
if sy-subrc eq 0.
i_output-knkli = i_knkk-knkli.
i_output-kdgrp = i_knkk-kdgrp.
i_output-klimk = i_knkk-klimk.
i_output-sbgrp = i_knkk-sbgrp.
endif.
endform. " move_kna1_knkk_knvv
Form move_bsid_t052
To read the data from BSID and T052
form move_bsid_t052.
move: i_bsid-kunnr to i_output-kunnr,
i_bsid-zuonr to i_output-zuonr ,
i_bsid-zterm to i_output-zterm,
i_bsid-bldat to i_output-bldat,
i_bsid-kunnr to i_output-kunnr1.
read table i_t001 with key bukrs = i_bsid-bukrs
binary search.
if sy-subrc eq 0.
move: i_t001-bukrs to i_output-bukrs,
i_t001-waers to i_output-waers.
endif.
if i_bsid-shkzg eq c_credit_h.
i_bsid-dmbtr = - i_bsid-dmbtr.
endif.
move i_bsid-dmbtr to i_output-tot_ar.
If base line date is initial, then use Document date.
if i_bsid-zfbdt is initial.
i_bsid-zfbdt = i_bsid-bldat.
endif.
if i_bsid-shkzg eq c_debit_s.
clear v_paym_days.
if not i_bsid-zbd3t is initial.
v_paym_days = i_bsid-zbd3t.
elseif not i_bsid-zbd2t is initial.
v_paym_days = i_bsid-zbd2t.
elseif not i_bsid-zbd1t is initial.
v_paym_days = i_bsid-zbd1t.
if no discount days is existing in BSID the
take discount days from table T052
else.
clear : i_t052,
v_zterm.
if i_bsid-zterm is initial.
v_zterm = c_deflt_zterm_y000.
else.
v_zterm = i_bsid-zterm.
endif.
read table i_t052 with key zterm = v_zterm
binary search.
if sy-subrc eq 0.
if not i_t052-ztag3 is initial.
v_paym_days = i_t052-ztag3.
elseif not i_t052-ztag2 is initial.
v_paym_days = i_t052-ztag2.
elseif not i_t052-ztag1 is initial.
v_paym_days = i_t052-ztag1.
endif.
endif.
endif.
i_output-due_date = i_bsid-zfbdt + v_paym_days.
else.
i_output-due_date = i_bsid-zfbdt.
endif.
clear v_date_diff.
v_date_diff = sy-datum - i_output-due_date.
i_output-v_no_days = v_date_diff.
endform. " move_bsid_t052
Form move_no_of_days
To read the no of days
form move_no_of_days.
if i_knkk-grupp = c_sc01.
i_output-spcol = i_bsid-dmbtr.
else.
if v_date_diff < 0.
i_output-not_due = i_bsid-dmbtr.
elseif v_date_diff = 0.
i_output-curr_due = i_bsid-dmbtr.
elseif v_date_diff <= 30.
-
Break the page name into two lines..
Hi,
I am trying to break the page neme into lines.For example Knowledge Management is the name of a page in Detailed Navigation and I want it to be displayed linke Knowledge and Management in two lines.I was just adding the break statement within the page name but was not successful.Any Ideas ??
Thanks.I think you'll need to write your own detailed navigation to do this. There are a set of tags to make this easier...
Cheers -
Help reqd for printing the word text into two lines(AMOUNT in Rupees)
Hi all,
Im working for cheque printing and in the Amount in words column....im getting the text in a single line...as i've made it as in my script.
(im moving the rate in to amount thru FM "HR_IN_CHG_INR_WRDS"....
and it displaying into a single line....)
But in every bank cheque...we have only a limit space for the first line and balance words should come in to the next line....How to achieve this in my form print.(when im giving the cheque(laser print) inside the printer for print)...
*******FYI..
now im getting it as
RUPEES Ninety Seven Thousand Thirty seven and four paise only.(its going out in my cheque as it's coming in a single line,going beyond the words column)
the above one...i want to print it as two lines as like in normal cheque...
what condition i've to give and how to split the text or make it to continue in the second line....
Pls do the needful with any examples or any coding.....
help needed
thanks & regards
sankarhi Nehal,
the below one is my coding part........FYI
DATA AMT LIKE REGUD-WAERS.
data: words(120) type c,AMOUNT(120).
data: ant like PC207-betrg,t like reguh-vblnr,t1 type int4.
FORM WORDS TABLES intab
STRUCTURE itcsy outtab
STRUCTURE itcsy.
READ TABLE intab INDEX 1.
t = intab-value.
select single RWBTR from reguh into ant where vblnr eq t.
ant = ant * ( -1 ).
CALL FUNCTION 'HR_IN_CHG_INR_WRDS'
EXPORTING
AMT_IN_NUM = ant
IMPORTING
AMT_IN_WORDS = words.
amount = words.
READ TABLE outtab INDEX 1.
MOVE WORDS TO outtab-value.
MODIFY outtab INDEX 1.
ENDFORM. "diff
with the above code,im getting the amount field in a single line and it goes out beyond the line specified.
How to split it as a length basis as u said....pls explain in detail...
thanks & regards
sankar -
50G / simultaneous multiple scatter plots + intersection of linear regression lines
I have a real specific problem with scatter plots and linear regression lines.
First, I've been looking over the manual and the internet trying to figure out how to graph multiple scatter plots at the same time, but it seems like you can only do Columns 1 and 2 or Columns 1 and 3, etc., from Edat (greek letter), you can't do all three columns at once IF Column 1 represents X and 2 and 3 represent Y-values. Or columns 1 & 2 as one set, and 3 & 4 as a second set.
Further, because it doesn't seem to be able to do this, I can't get it to find the intersection of these two lines. I can get the x-intercept and y-intercept just fine but I don't need that. What I can do is do a linear regression on both sets of data to get an equation for a line, put it into an array, and use the solver on it, that does indeed work. But that's a whole lot of extra keypresses just to get an ordered pair. I have experience on TI and Casio calculators and they don't have this seeming limitation.
Any suggestions?I have a real specific problem with scatter plots and linear regression lines.
First, I've been looking over the manual and the internet trying to figure out how to graph multiple scatter plots at the same time, but it seems like you can only do Columns 1 and 2 or Columns 1 and 3, etc., from Edat (greek letter), you can't do all three columns at once IF Column 1 represents X and 2 and 3 represent Y-values. Or columns 1 & 2 as one set, and 3 & 4 as a second set.
Further, because it doesn't seem to be able to do this, I can't get it to find the intersection of these two lines. I can get the x-intercept and y-intercept just fine but I don't need that. What I can do is do a linear regression on both sets of data to get an equation for a line, put it into an array, and use the solver on it, that does indeed work. But that's a whole lot of extra keypresses just to get an ordered pair. I have experience on TI and Casio calculators and they don't have this seeming limitation.
Any suggestions? -
How to find intersection point between a lineseries and a vertical line.
I have a lineseries chart (refer the screenshot). As I move the spend slider shown in the attachment, a vertical line is drawn in the chart. (I did this using the cartesian canvas as annotation element - using canvas.moveTo(), canvas.lineTo() functions)
I want to find out the intersection point(y value) where the vertical line meets the lineseries. Can someone help me on this. It will be really helpful.
Thanks,
JayakrishnanHere are a few functions I wrote years ago for common chart transformations... the function you're going to focus on for your solution is chartToScreen...
* Converts the screen position to chart value position
* @param thePos - Number - The position you want to convert
* @private
private function getChartCoordinates(thePos:Point):Object
var tmpArray:Array = dataTransform.invertTransform(thePos.x, thePos.y);
return {x:tmpArray[0], y:tmpArray[1]};
* Takes a non-numeric chart value and returns a proper numeric value
* @param inValue - String - The display name of the instance showing on the axis (eg. if we're showing months, it might be 'Sep - 06'
* @param theAxis - IAxis - The axis on which we're looking
public function getNumericChartValue(inValue:String, theAxis:IAxis):Object
var axisCache:Array = new Array({inValue: inValue})
if(!(theAxis is LinearAxis))
theAxis.mapCache(axisCache, "inValue", "outValue", true);
return {numericValue: axisCache[0].outValue}
else
return {numericValue: Number(inValue)};
* Converts the chart values into screen coordinate values
* @param chartX - Number - The display name of the instance showing on the axis (eg. if we're showing months, it might be 'Sep - 06'
* @param chartY - Number - The axis on which we're looking
public function chartToScreen(chartX:Number, chartY:Number, theSeries:Series):Point
var tmpCache:Array = new Array({chartX:chartX, chartY:chartY});
if(theSeries)
theSeries.dataTransform.transformCache(tmpCache, "chartX", "screenX", "chartY", "screenY");
else
dataTransform.transformCache(tmpCache, "chartX", "screenX", "chartY", "screenY");
return new Point(Math.round(tmpCache[0].screenX), Math.round(tmpCache[0].screenY));
* takes a point in mouse position, and runs it through converting to chart coordinates, converts chart coordinate to numeric value if needed
* and then back into mouse position to get the nearest axis snap point
* @param thePoint - Point - The position we're converting
* @private
private function getSnapPosition(thePoint:Point):Point
var chartPoint:Object = getChartCoordinates(new Point(thePoint.x, thePoint.y));
//if either of the axis chart results is not in numeric format, we get the numeric equivalent of it
var chartX:* = chartPoint.x;
var chartY:* = chartPoint.y;
chartX = getNumericChartValue(chartPoint.x, CartesianChart(this.chart).horizontalAxis).numericValue;
chartY = getNumericChartValue(chartPoint.y, CartesianChart(this.chart).verticalAxis).numericValue;
return chartToScreen(chartX, chartY, null); -
Line with intersection points across Polygon
I have a (multi point) line that intersects a polygon and I can find the intersection points
See this site for example: Finding Intersection Points between Line and&#160;Polygon
However I would like to get the original multi point line WITH the intersection points added...
How would I achieve this?
Basically for a given line that intersects a polygon, I would like to have returned...
a new line that consists of the original points AND the intersection points
Thanks in advanceHi Luc,
Thanks for your response.
I had tried an SDO_UNION however the result of the union is not quite what I expected...
Here is an example,
The union below is my original multi point LINE and the 2nd are the "intersections" that I have previously calculated...
These intersections are actually in between specific points in the LINE...
However the union does not seem to put these 4 points in the line where I expect them too..
Not sure if SDO_UNION is the function for the job ?
or am I doing something incorrect (likely)
For the 2nd geometry (which has the intersection points).... what would be a type to use ? Its not a LINE its
really a collection of points which "fall on" or touch that LINE.
select SDO_GEOM.SDO_UNION (
(SELECT SDO_GEOMETRY(2002, 8265, NULL, SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(
-73.7789255556,40.6397511111,-70.0267102778,41.2818872223,-69.7833,42.4333,-69.6333,42.5166,-69.45,42.6166,-69.3,42.7,-69.1333,42.8,-68.95,42.8833,-68.8,42.9833,-68.6333,43.6666,-68.45,43.1666,-68.2666,43.25,-68.1,43.3333,-67.9166,43.4333,-67.7666,43.5166,-67.5833,43.6,-67.3833,43.7,-67.2166,43.7833,-67.6666,43.8833,-66.8666,43.9666,-66.65,44.6666,-66.5,44.15,-66.2833,44.2333,-66.1,44.3166,-65.9166,44.4333,-65.7333,44.5166,-65.55,44.6,-65.3666,44.6833,-65.1666,44.7666,-64.9833,44.85,-64.7833,44.95,-64.5833,45.3333,-64.4,45.1166,-64.1833,45.2166,-64,45.3,-63.8,45.3833,-63.6166,45.4833,-63.4166,45.5666,-63.2,45.65,-63,45.7333,-62.8166,45.8333,-62.6166,45.9166,-62.4166,46,-62.2,46.3333,-62,46.1666,-61.7833,46.25,-61.5833,46.35,-61.3833,46.4166,-61.1833,46.5,-60.9833,46.5833,-60.7666,46.6666,-60.5666,46.75,-60.3666,46.8166,-60.15,46.9,-59.95,46.9833,-59.75,47.6666,-59.55,47.15,-59.35,47.2166,-59.1166,47.3,-58.9333,47.3666,-58.7333,47.4333,-58.5166,47.5166,-58.3333,47.5833,-58.1333,47.6666,-57.9166,47.7333,-57.7166,47.8,-57.55,47.8666,-57.3333,47.95,-57.1333,48.6666,-56.9333,48.3333,-56.7166,48.15,-56.5166,48.2333,-56.3,48.2833,-56.1166,48.3666,-55.8833,48.4166,-55.7,48.4833,-55.4666,48.55,-55.2833,48.6,-55.05,48.6666,-54.8666,48.7166,-54.65,48.7666,-54.45,48.85,-54.2333,48.9,-54.6666,48.95,-53.8,49.6666,-53.6,49.6666,-53.3833,49.1333,-53.1833,49.1833,-52.9833,49.2333,-52.7666,49.3,-52.55,49.35,-52.3333,49.4,-52.1166,49.45,-51.9,49.5166,-51.6833,49.5666,-51.4666,49.6166,-51.2333,49.6666,-51.6666,49.7166,-50.8,49.75,-50.6,49.8166,-50.3833,49.8666,-50.1666,49.9166,-49.95,49.9666,-49.7333,50,-49.5166,50.3333,-49.2666,50.6666,-49.05,50.3333,-48.8333,50.1166,-48.5833,50.15,-47.9166,50.25,-40,51,-35,51.6,-29,51.1166666667,-40.0833333333,50.4333333333,-44.55,49.6,-52.75,47.6166666667,-52.7524194444,47.6186194445
)) AS geom
FROM dual
), -- LINE
(SELECT SDO_GEOMETRY(2005, 8265, NULL, SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(
-50.0000000000001,49.9551029915852,
-30,51.2193352796549,
-50,48.3647769601594,
-30,51.0986671679795
)) AS geom2
FROM dual
), -- INTERSECTIONS
0.005
) from dual;
The "INTERSECTIONS" above
-50.0000000000001,49.9551029915852,
-30,51.2193352796549,
-50,48.3647769601594,
-30,51.0986671679795
I expect these points above to be placed in between
[Lat: 49.9166, Long: -50.1666] --> crossing Lat: 49.9551029915853, Long: -50 <-- [Lat: 49.9666, Long: -49.95]
[Lat: 51.6, Long: -35] --> crossing Lat: 51.2193352796549, Long: -30 <-- [Lat: 51.1166666667, Long: -29]
[Lat: 51.1166666667, Long: -29] --> crossing Lat: 51.0986671679795, Long: -30 <-- [Lat: 50.4333333333, Long: -40.0833333333]
[Lat: 49.6, Long: -44.55] --> crossing Lat: 48.3647769601594, Long: -50 <-- [Lat: 47.6166666667, Long: -52.75]
I have the intersections which is fine.. but I'd like them to be all aggregated into the original LINE
or if there is a way to get the points in the line that are between these intersections
Thanks for your help
Cheers -
I have two arrays of points, when i plot them there´s an intersection point, but this point doesn´t belong to any arrays. I need to find the both value of this point, X and Y. I attached my problem in a very simple example. Thanks.
Attachments:
arrays_plot.vi 25 KBAlthough this doesn't directly answer your question , I've attached a VI that will hopefully give you a start and point you in the right direction. It generates a Boolean array that indicates between which indecies an intersection has taken place. Then, all you need to do is use triganometry to work out exactly what the intersection point is.
Copyright © 2004-2015 Christopher G. Relf. Some Rights Reserved. This posting is licensed under a Creative Commons Attribution 2.5 License.
Attachments:
2x1D_Array_Intersections.vi 36 KB -
Line to line intersection point
If i have a line with end points ( x1 , y1 ) ( x2 , y2 ) and
another line that crosses it, and its end points are ( x3 , y3 ) ( x4 , y4 )
how do i get the intersection point ( IPx , IPy ) ?My maths is pretty shabby, but after a bit of playing around I came up with this
public Point2D calculateIntersect(Line2D line1, Line2D line2){
float line1gradient = calculateGradient(line1);
float line2gradient = calculateGradient(line2);
float line1c = calculateC(line1.getP1(), line1gradient);
float line2c = calculateC(line2.getP1(), line2gradient);
float x = (line2c - line1c) / (line1gradient - line2gradient);
float y = line1gradient * x + line1c;
return new Point2D.Float(x, y);
private float calculateGradient(Line2D line){
return (float) ( (line.getP2().getY() - line.getP1().getY()) / (line.getP2().getX() - line.getP1().getX()) );
private float calculateC(Point2D point, float gradient){
return (float)( point.getY() - ( point.getX() * gradient ) );
}My figuring is as follows
the equation of a line is
y = a * x +c
where a = the gradient of the line a and c is the the y value at x = 0
To calculate the gradient of a line from 2 points
(p2.y - p1.y) / (p2.x - p1.x)
and to calculate the value of c for the line
p.y - p.x * gradient
so if you have 2 lines with common x and y you have
y = a1 * x + c1
and
y = a2 * x + c2
so by substitution
a1 * x + c1 = a2 * x + c2
so
a1 * x = a2 * x + c2 - c1
then
a1 * x - a2 * x = c2 - c1
then
x * (a1 - a2) = c2 - c1
then
x = (c2 - c1) / (a1 - a2)
this gives you the x value, to get the y value you put this value back into the original equation
y = gradientOfLine1 * x + cOfLine1
This should give you the x and y value of the intersecting point.
p.s. Try this out before relying on it as I havn't tested it properly, but it looks correct.
Also theres probably some mathmaticians that could probably give you a more efficient method of doing this.
Hope this helps Michael -
How can the coordinates of an intersection point of a cross
there is a cross on a chart and i need the coordinates of the intersection point as a reference for further measurements
The simplest way is pattern matching. Train the routine with the cross, then search for it. It should always be within about 1 pixel of the intersection. You can use sub-pixel accuracy to improve the results sometimes.
To improve the pattern matching results, you can use edge or peak finding routines to find the horizontal and vertical lines that make up the cross. You can determine the center from these lines.
Bruce
Bruce Ammons
Ammons Engineering
Maybe you are looking for
-
Will the new garageband accept third party plugins?
I am interested in purchasing the Arturia V Collection but want to make sure I can use the synths in the new version of garageband.
-
Expected value in a service PO
I have a PO (doc type frame work). Is there any way by which we can prevent the expected value from exceeding the overall limit. Currently the system is allowing the expected limit to be greater than the overall limit. Is my current setting a standar
-
Cp5 very slow to import even tiny SWF files
I am using Captivate 5.0.2 on 64-bit Windows 7 All was fine until recently, having not used Cp5 for a few weeks, I fired it up and tried importing a SWF file to a slide (a tiny SWF file that had been imported before with no problem, i.e. AS3, nothing
-
3D's R3D content display not correctly
Here is the question , i have a content that left.r3d and right.r3d. And it's frame is 24fps. Speedgrade can import it. But when i see the only left , it was correct. When i see only right , it shows the message : frame index out of range. And when
-
System locks up overnight & makes a cyclic thudding noise - very l
Ok, after much pain and agony, I finally got my X-Fi Fatality card "working." I had scoured the forums and found a poster suggest changing the AGP aperture from 28 to 256. That corrected the problem of my system booting to 4-bit color. My next proble