如何获得二维线上的点(坐标)?

时间:2018-08-16 04:45:22

标签: coordinates line

当我绘制point1(p1)和point2(p2)时,绘制了p1和p2之间的线。我想知道一些要点。 例如,我想获取x,y坐标(作为数组类型:x [],y [])。有没有算法或代码?

1 个答案:

答案 0 :(得分:0)

这是我想出的: 可以说,我们需要使用斜率公式 y = m * x + b 来找到斜率,以便沿着该线绘制点。我们需要以下条件:

  • (x1,y1)
  • (x2,y2)

找到以下内容:

  • m =(y2-y1)/(x2-x1)
  • b = y1-(m * x1)
  • minX = min(x1,x2)用于限制我们的下限
  • maxX = max(x1,x2)用于限制我们的上限

现在一切都设置好了,我们可以逐像素绘制线条并获得所需的所有(x,y)坐标。逻辑很简单:

x minX 循环到 maxX ,然后将其插入 y = m * x + b (我们已经拥有除 y 之外的所有变量。然后,存储(x,y)对。

我已经使用Java在逻辑和视觉上进行了编码。另外,我使用了LinkedList而不是数组(因为我不知道将获得的点数)。

我还绘制了Java将绘制的内容(蓝色)和我的方法(绘制的红色)。它们几乎是精确的输出和坐标。下图放大了5倍于原始尺寸。

注意!上面的解释是如果线不是垂直的(由于斜率是不确定的,除以零),将使用什么说明。如果是这样,则将插入y(而不是x)值,并从以下公式x =(y-b)/ m(而不是y = m * x + b)中找到x(而不是y)值。 不过,代码会处理垂直线。

enter image description here

function cd_meta_box_cb($post){
global $post;
echo'<b> Select the contributors that have contributed to this post: </b>';
echo '<br><br>';   
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
global $wpdb;
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users 
ORDER BY user_nicename");
$i=0;
$n=count($authors);
foreach($authors as $author) {
    echo"<input type='checkbox' id='my_meta_box_check' 
    name='my_meta_box_check'";
    echo"value=";
    the_author_meta('user_nicename', $author->ID);
    echo">";
    echo"<label for='author'.$i>";
    the_author_meta('user_nicename', $author->ID);
    echo"</label>";
    echo "<br />";
  }

 echo"<input type='submit' id='submit_btn' name='submit' value='Submit'>";
  }
//save custom data when our post is saved
 function save_custom_data($post_id) 
 {  
  global $post;
  $contributor=get_post_meta($post->ID,'my_meta_box_check',true);
  if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;     

 if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( 
 $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;

// if our current user can't edit this post, bail
if( !current_user_can( 'edit_post' ) ) return;
if ( isset($_POST['my_meta_box_check']) ) 
{        

    $data=serialize($_POST['my_meta_box_check']);   
    update_post_meta($post_id, 'my_meta_box_check',$data);      
 } 
else {
    delete_post_meta($post_id, 'my_meta_box_check');
 } 
}
add_action( 'save_post', 'save_custom_data' );
function displaymeta()
{

    global $post;
    $m_meta_description = get_post_meta($post->ID, 'my_meta_box_check', 
  true);
    echo 'Meta box value: ' . unserialize($m_meta_description);
}

add_filter( 'the_content', 'displaymeta' );

?>